Skip to content
Snippets Groups Projects
Commit 5a5091ad authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add MessageListener

parent 5f4dd230
No related branches found
No related tags found
1 merge request!2Bindings API wrapper
...@@ -3,6 +3,7 @@ import Bindings ...@@ -3,6 +3,7 @@ import Bindings
public struct Connection { public struct Connection {
public var isAuthenticated: () -> Bool public var isAuthenticated: () -> Bool
public var send: MessageSender public var send: MessageSender
public var listen: MessageListener
} }
extension Connection { extension Connection {
...@@ -11,7 +12,8 @@ extension Connection { ...@@ -11,7 +12,8 @@ extension Connection {
) -> Connection { ) -> Connection {
Connection( Connection(
isAuthenticated: { false }, isAuthenticated: { false },
send: .live(bindingsConnection: bindingsConnection) send: .live(bindingsConnection: bindingsConnection),
listen: .live(bindingsConnection: bindingsConnection)
) )
} }
...@@ -20,7 +22,8 @@ extension Connection { ...@@ -20,7 +22,8 @@ extension Connection {
) -> Connection { ) -> Connection {
Connection( Connection(
isAuthenticated: bindingsAuthenticatedConnection.isAuthenticated, isAuthenticated: bindingsAuthenticatedConnection.isAuthenticated,
send: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection) send: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
listen: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection)
) )
} }
} }
...@@ -29,7 +32,8 @@ extension Connection { ...@@ -29,7 +32,8 @@ extension Connection {
extension Connection { extension Connection {
public static let failing = Connection( public static let failing = Connection(
isAuthenticated: { false }, isAuthenticated: { false },
send: .failing send: .failing,
listen: .failing
) )
} }
#endif #endif
import Bindings
public struct MessageListener {
public var listen: (Int, String, @escaping (Data) -> Void) -> Data
public func callAsFunction(
messageType: Int,
listenerName: String = "MessageListener",
callback: @escaping (Data) -> Void
) -> Data {
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) -> Data?
) -> MessageListener {
MessageListener { messageType, listenerName, callback in
let listener = Listener(listenerName: listenerName, onHear: callback)
let listenerId = register(messageType, listener)
guard let listenerId = listenerId else {
fatalError("BindingsConnection.registerListener returned `nil`")
}
return listenerId
}
}
}
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
Data()
}
}
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment