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

Add ConnectionRegisterListener functor

parent 28f7f025
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!18Update Bindings
...@@ -4,6 +4,7 @@ public struct Connection { ...@@ -4,6 +4,7 @@ public struct Connection {
public var isAuthenticated: ConnectionIsAuthenticated public var isAuthenticated: ConnectionIsAuthenticated
public var getId: ConnectionGetId public var getId: ConnectionGetId
public var getPartner: ConnectionGetPartner public var getPartner: ConnectionGetPartner
public var registerListener: ConnectionRegisterListener
public var send: ConnectionSend public var send: ConnectionSend
public var close: ConnectionClose public var close: ConnectionClose
} }
...@@ -14,6 +15,7 @@ extension Connection { ...@@ -14,6 +15,7 @@ extension Connection {
isAuthenticated: .live(bindingsConnection), isAuthenticated: .live(bindingsConnection),
getId: .live(bindingsConnection), getId: .live(bindingsConnection),
getPartner: .live(bindingsConnection), getPartner: .live(bindingsConnection),
registerListener: .live(bindingsConnection),
send: .live(bindingsConnection), send: .live(bindingsConnection),
close: .live(bindingsConnection) close: .live(bindingsConnection)
) )
...@@ -24,6 +26,7 @@ extension Connection { ...@@ -24,6 +26,7 @@ extension Connection {
isAuthenticated: .live(bindingsConnection), isAuthenticated: .live(bindingsConnection),
getId: .live(bindingsConnection), getId: .live(bindingsConnection),
getPartner: .live(bindingsConnection), getPartner: .live(bindingsConnection),
registerListener: .live(bindingsConnection),
send: .live(bindingsConnection), send: .live(bindingsConnection),
close: .live(bindingsConnection) close: .live(bindingsConnection)
) )
...@@ -35,6 +38,7 @@ extension Connection { ...@@ -35,6 +38,7 @@ extension Connection {
isAuthenticated: .unimplemented, isAuthenticated: .unimplemented,
getId: .unimplemented, getId: .unimplemented,
getPartner: .unimplemented, getPartner: .unimplemented,
registerListener: .unimplemented,
send: .unimplemented, send: .unimplemented,
close: .unimplemented close: .unimplemented
) )
......
import Bindings
import XCTestDynamicOverlay
public struct ConnectionRegisterListener {
public var run: (Int, MessageListener) throws -> Void
public func callAsFunction(
messageType: Int,
listener: MessageListener
) throws {
try run(messageType, listener)
}
}
extension ConnectionRegisterListener {
public static func live(_ bindingsConnection: BindingsConnection) -> ConnectionRegisterListener {
ConnectionRegisterListener { messageType, listener in
try bindingsConnection.registerListener(
messageType,
newListener: listener.makeBindingsListener()
)
}
}
public static func live(_ bindingsConnection: BindingsAuthenticatedConnection) -> ConnectionRegisterListener {
ConnectionRegisterListener { messageType, listener in
try bindingsConnection.registerListener(
messageType,
newListener: listener.makeBindingsListener()
)
}
}
}
extension ConnectionRegisterListener {
public static let unimplemented = ConnectionRegisterListener(
run: XCTUnimplemented("\(Self.self)")
)
}
...@@ -46,4 +46,12 @@ extension Message: Codable { ...@@ -46,4 +46,12 @@ extension Message: Codable {
case encrypted = "Encrypted" case encrypted = "Encrypted"
case roundId = "RoundId" case roundId = "RoundId"
} }
static func decode(_ data: Data) throws -> Message {
try JSONDecoder().decode(Self.self, from: data)
}
func encode() throws -> Data {
try JSONEncoder().encode(self)
}
} }
//import Bindings import Bindings
import XCTestDynamicOverlay
public struct MessageListener {
public init(
name: String = "MessageListener",
handle: @escaping (Message) -> Void
) {
self.name = name
self.handle = handle
}
public var name: String
public var handle: (Message) -> Void
}
extension MessageListener {
public static let unimplemented = MessageListener(
handle: XCTUnimplemented("\(Self.self)")
)
}
extension MessageListener {
func makeBindingsListener() -> BindingsListenerProtocol {
class Listener: NSObject, BindingsListenerProtocol {
init(_ listener: MessageListener) {
self.listener = listener
}
let listener: MessageListener
func hear(_ item: Data?) {
guard let item = item else {
fatalError("BindingsListener.hear received `nil`")
}
do {
listener.handle(try Message.decode(item))
} catch {
fatalError("BindingsListener.hear message decoding failed with error: \(error)")
}
}
func name() -> String {
listener.name
}
}
return Listener(self)
}
}
// //
//public struct MessageListener { //public struct MessageListener {
// public var listen: (Int, String, @escaping (Message) -> Void) -> Void // public var listen: (Int, String, @escaping (Message) -> Void) -> Void
...@@ -38,32 +88,6 @@ ...@@ -38,32 +88,6 @@
// } // }
//} //}
// //
//private class Listener: NSObject, BindingsListenerProtocol {
// init(listenerName: String, onHear: @escaping (Message) -> Void) {
// self.listenerName = listenerName
// self.onHear = onHear
// super.init()
// }
//
// let listenerName: String
// let onHear: (Message) -> Void
// let decoder = JSONDecoder()
//
// func hear(_ item: Data?) {
// guard let item = item else {
// fatalError("BindingsListenerProtocol.hear received `nil`")
// }
// do {
// onHear(try decoder.decode(Message.self, from: item))
// } catch {
// fatalError("Message decoding failed with error: \(error)")
// }
// }
//
// func name() -> String {
// listenerName
// }
//}
// //
//#if DEBUG //#if DEBUG
//extension MessageListener { //extension MessageListener {
......
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