The Webview Univeral Flutter package for Appeto SDK.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

60 lignes
1.7 KiB

  1. //
  2. // MessageChannelPlugin.swift
  3. // webview_universal
  4. //
  5. // Created by Bin Yang on 2021/11/19.
  6. //
  7. import FlutterMacOS
  8. import Foundation
  9. public class ClientMessageChannelPlugin: NSObject, FlutterPlugin {
  10. public init(methodChannel: FlutterMethodChannel) {
  11. self.methodChannel = methodChannel
  12. super.init()
  13. }
  14. public static func register(with registrar: FlutterPluginRegistrar) {
  15. let channel = FlutterMethodChannel(name: "webview_message/client_channel", binaryMessenger: registrar.messenger)
  16. let instance = ClientMessageChannelPlugin(methodChannel: channel)
  17. registrar.addMethodCallDelegate(instance, channel: channel)
  18. ServerMessageChannel.shared.addClient(client: instance)
  19. }
  20. private let methodChannel: FlutterMethodChannel
  21. public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  22. ServerMessageChannel.shared.dispatchMethodCall(call: call, from: self)
  23. // this is a boardcast, so we complete this with sucess.
  24. result(nil)
  25. }
  26. fileprivate func invokeMethod(_ call: FlutterMethodCall) {
  27. methodChannel.invokeMethod(call.method, arguments: call.arguments)
  28. }
  29. }
  30. class ServerMessageChannel {
  31. static let shared: ServerMessageChannel = ServerMessageChannel()
  32. private var clients: [ClientMessageChannelPlugin] = []
  33. func addClient(client: ClientMessageChannelPlugin) {
  34. clients.append(client)
  35. }
  36. func removeClient(client: ClientMessageChannelPlugin) {
  37. if let index = clients.firstIndex(of: client) {
  38. clients.remove(at: index)
  39. }
  40. }
  41. func dispatchMethodCall(call: FlutterMethodCall, from clientFrom: ClientMessageChannelPlugin) {
  42. for client in clients {
  43. if client != clientFrom {
  44. client.invokeMethod(call)
  45. }
  46. }
  47. }
  48. }