parent
f503ba50e3
commit
bb5918b860
@ -0,0 +1,27 @@ |
|||||||
|
// |
||||||
|
// BaseCallback.swift |
||||||
|
// flutter_openim_sdk |
||||||
|
// |
||||||
|
// Created by willem on 2021/10/9. |
||||||
|
// |
||||||
|
|
||||||
|
import Foundation |
||||||
|
import OpenIMCore |
||||||
|
|
||||||
|
public class BaseCallback: NSObject, Open_im_sdkBaseProtocol { |
||||||
|
|
||||||
|
private let result:FlutterResult |
||||||
|
|
||||||
|
init(result:@escaping FlutterResult) { |
||||||
|
self.result = result |
||||||
|
} |
||||||
|
|
||||||
|
public func onError(_ errCode: Int, errMsg: String?) { |
||||||
|
print("BaseResult: " + errMsg!) |
||||||
|
safeMainAsync { self.result(FlutterError(code: "\(errCode)", message: errMsg, details: nil)) } |
||||||
|
} |
||||||
|
|
||||||
|
public func onSuccess(_ data: String?) { |
||||||
|
safeMainAsync { self.result(data) } |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
// |
||||||
|
// BaseServiceManager.swift |
||||||
|
// flutter_openim_sdk |
||||||
|
// |
||||||
|
// Created by willem on 2021/10/9. |
||||||
|
// |
||||||
|
|
||||||
|
import Flutter |
||||||
|
import OpenIMCore |
||||||
|
import UIKit |
||||||
|
|
||||||
|
public typealias ImHandler = (_ methodCall: FlutterMethodCall, _ result: @escaping FlutterResult) -> Void |
||||||
|
|
||||||
|
open class BaseServiceManager { |
||||||
|
public let channel: FlutterMethodChannel |
||||||
|
private var methodHandlers: [String: ImHandler] = [:] |
||||||
|
|
||||||
|
public init(channel: FlutterMethodChannel) { |
||||||
|
self.channel = channel |
||||||
|
self.registerHandlers() |
||||||
|
} |
||||||
|
|
||||||
|
public func handleMethod(call: FlutterMethodCall, result: @escaping FlutterResult) { |
||||||
|
let method: String = call.method |
||||||
|
guard let handler = methodHandlers[method] else { |
||||||
|
print("Handle MethodName Error: \(typeName(self))'s method: [\(method)] not found") |
||||||
|
return |
||||||
|
} |
||||||
|
handler(call, result) |
||||||
|
} |
||||||
|
|
||||||
|
public subscript(_ key: String) -> ImHandler? { |
||||||
|
get { |
||||||
|
methodHandlers[key] |
||||||
|
} |
||||||
|
set { |
||||||
|
methodHandlers[key] = newValue |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public func registerHandlers() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public func callBack(_ result: @escaping FlutterResult, _ content: Any? = nil) { |
||||||
|
safeMainAsync { |
||||||
|
result(content) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
// |
||||||
|
// Any+Extension.swift |
||||||
|
// flutter_openim_sdk |
||||||
|
// |
||||||
|
// Created by willem on 2021/10/9. |
||||||
|
// |
||||||
|
|
||||||
|
import Foundation |
||||||
|
|
||||||
|
public func typeName(_ obj: Any) -> String { |
||||||
|
if obj is AnyClass { |
||||||
|
return "\(obj)" |
||||||
|
} |
||||||
|
return "\(type(of: obj))" |
||||||
|
} |
||||||
|
|
||||||
|
public func safeMainAsync(_ work: @escaping @convention(block) () -> Void) { |
||||||
|
if Thread.isMainThread { |
||||||
|
work() |
||||||
|
} else { |
||||||
|
DispatchQueue.main.async(execute: work) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,109 @@ |
|||||||
|
// |
||||||
|
// FlutterMethodCall+Extension.swift |
||||||
|
// flutter_openim_sdk |
||||||
|
// |
||||||
|
// Created by willem on 2021/10/9. |
||||||
|
// |
||||||
|
|
||||||
|
import Foundation |
||||||
|
import Flutter |
||||||
|
|
||||||
|
public protocol Stringable { |
||||||
|
var rawValue: String { get } |
||||||
|
} |
||||||
|
|
||||||
|
extension String: Stringable { |
||||||
|
public var rawValue: String { self } |
||||||
|
} |
||||||
|
|
||||||
|
public extension FlutterMethodCall { |
||||||
|
subscript(_ key: Stringable) -> Any? { |
||||||
|
guard let params = self.arguments as? [String: Any] else { |
||||||
|
return nil |
||||||
|
} |
||||||
|
return params[key.rawValue] |
||||||
|
} |
||||||
|
|
||||||
|
subscript(string key: Stringable) -> String { |
||||||
|
return self[key] as? String ?? "" |
||||||
|
} |
||||||
|
|
||||||
|
subscript(jsonString key: Stringable) -> String { |
||||||
|
guard let params = self.arguments as? [String: Any] else { |
||||||
|
return "" |
||||||
|
} |
||||||
|
let arg = params[key.rawValue] as AnyObject |
||||||
|
return JsonUtil.toString(object: arg) |
||||||
|
} |
||||||
|
|
||||||
|
subscript(int32 key: Stringable) -> Int32 { |
||||||
|
guard let value = self[key] else { |
||||||
|
return 0 |
||||||
|
} |
||||||
|
if let value = value as? Int32 { |
||||||
|
return value |
||||||
|
} else if let value = value as? String { |
||||||
|
return Int32(value) ?? 0 |
||||||
|
} |
||||||
|
return 0 |
||||||
|
} |
||||||
|
|
||||||
|
subscript(int64 key: Stringable) -> Int64 { |
||||||
|
guard let value = self[key] else { |
||||||
|
return 0 |
||||||
|
} |
||||||
|
if let value = value as? Int64 { |
||||||
|
return value |
||||||
|
} else if let value = value as? String { |
||||||
|
return Int64(value) ?? 0 |
||||||
|
} |
||||||
|
return 0 |
||||||
|
} |
||||||
|
|
||||||
|
subscript(int key: Stringable) -> Int { |
||||||
|
guard let value = self[key] else { |
||||||
|
return 0 |
||||||
|
} |
||||||
|
if let value = value as? Int { |
||||||
|
return value |
||||||
|
} else if let value = value as? String { |
||||||
|
return Int(value) ?? 0 |
||||||
|
} |
||||||
|
return 0 |
||||||
|
} |
||||||
|
|
||||||
|
subscript(double key: Stringable) -> Double { |
||||||
|
guard let value = self[key] else { |
||||||
|
return 0 |
||||||
|
} |
||||||
|
if let value = value as? Double { |
||||||
|
return value |
||||||
|
} else if let value = value as? String { |
||||||
|
return Double(value) ?? 0.0 |
||||||
|
} |
||||||
|
return 0 |
||||||
|
} |
||||||
|
|
||||||
|
subscript(bool key: Stringable, default default: Bool = false) -> Bool { |
||||||
|
guard let value = self[key] else { |
||||||
|
return `default` |
||||||
|
} |
||||||
|
if let value = value as? Bool { |
||||||
|
return value |
||||||
|
} else if let value = value as? Int { |
||||||
|
return value != 0 |
||||||
|
} else if let value = value as? NSString { |
||||||
|
return value.boolValue |
||||||
|
} |
||||||
|
return `default` |
||||||
|
} |
||||||
|
|
||||||
|
subscript(dict key: Stringable) -> [AnyHashable: Any] { |
||||||
|
return self[key] as? [AnyHashable: Any] ?? [:] |
||||||
|
} |
||||||
|
|
||||||
|
func toJsonString() -> String { |
||||||
|
let params = self.arguments as AnyObject |
||||||
|
return JsonUtil.toString(object: params) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue