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