Skip to content
Snippets Groups Projects

Bindings API wrapper

Merged Dariusz Rybicki requested to merge feature/bindings-api-wrapper into main
1 file
+ 2
6
Compare changes
  • Side-by-side
  • Inline
+ 67
0
 
import Bindings
 
 
public struct MessageListener {
 
public var listen: (Int, String, @escaping (Data) -> Void) -> Void
 
 
public func callAsFunction(
 
messageType: Int,
 
listenerName: String = "MessageListener",
 
callback: @escaping (Data) -> Void
 
) {
 
listen(messageType, listenerName, callback)
 
}
 
}
 
 
extension MessageListener {
 
public static func live(
 
bindingsConnection: BindingsConnection
 
) -> MessageListener {
 
MessageListener.live(
 
register: bindingsConnection.registerListener(_:newListener:)
 
)
 
}
 
 
public static func live(
 
bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
 
) -> MessageListener {
 
MessageListener.live(
 
register: bindingsAuthenticatedConnection.registerListener(_:newListener:)
 
)
 
}
 
 
private static func live(
 
register: @escaping (Int, BindingsListenerProtocol) -> Void
 
) -> MessageListener {
 
MessageListener { messageType, listenerName, callback in
 
register(messageType, Listener(listenerName: listenerName, onHear: callback))
 
}
 
}
 
}
 
 
private class Listener: NSObject, BindingsListenerProtocol {
 
init(listenerName: String, onHear: @escaping (Data) -> Void) {
 
self.listenerName = listenerName
 
self.onHear = onHear
 
super.init()
 
}
 
 
let listenerName: String
 
let onHear: (Data) -> Void
 
 
func hear(_ item: Data?) {
 
guard let item = item else { return }
 
onHear(item)
 
}
 
 
func name() -> String {
 
listenerName
 
}
 
}
 
 
#if DEBUG
 
extension MessageListener {
 
public static let failing = MessageListener { _, _, _ in
 
fatalError("Not implemented")
 
}
 
}
 
#endif
Loading