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

WIP

Comment out code that needs to be updated
parent b4e05640
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!18Update Bindings
import Bindings //import Bindings
//
public struct Client { //public struct Client {
public var getId: ClientIdProvider // public var getId: ClientIdProvider
public var hasRunningProcesses: ClientProcessStatusProvider // public var hasRunningProcesses: ClientProcessStatusProvider
public var networkFollower: NetworkFollower // public var networkFollower: NetworkFollower
public var waitForNetwork: NetworkWaiter // public var waitForNetwork: NetworkWaiter
public var isNetworkHealthy: NetworkHealthProvider // public var isNetworkHealthy: NetworkHealthProvider
public var monitorNetworkHealth: NetworkHealthListener // public var monitorNetworkHealth: NetworkHealthListener
public var listenErrors: ClientErrorListener // public var listenErrors: ClientErrorListener
public var makeIdentity: IdentityMaker // public var makeIdentity: IdentityMaker
public var connect: ConnectionMaker // public var connect: ConnectionMaker
public var waitForDelivery: MessageDeliveryWaiter // public var waitForDelivery: MessageDeliveryWaiter
} //}
//
extension Client { //extension Client {
public static func live(bindingsClient: BindingsCmix) -> Client { // public static func live(bindingsClient: BindingsCmix) -> Client {
Client( // Client(
getId: .live(bindingsClient: bindingsClient), // getId: .live(bindingsClient: bindingsClient),
hasRunningProcesses: .live(bindingsClient: bindingsClient), // hasRunningProcesses: .live(bindingsClient: bindingsClient),
networkFollower: .live(bindingsClient: bindingsClient), // networkFollower: .live(bindingsClient: bindingsClient),
waitForNetwork: .live(bindingsClient: bindingsClient), // waitForNetwork: .live(bindingsClient: bindingsClient),
isNetworkHealthy: .live(bindingsClient: bindingsClient), // isNetworkHealthy: .live(bindingsClient: bindingsClient),
monitorNetworkHealth: .live(bindingsClient: bindingsClient), // monitorNetworkHealth: .live(bindingsClient: bindingsClient),
listenErrors: .live(bindingsClient: bindingsClient), // listenErrors: .live(bindingsClient: bindingsClient),
makeIdentity: .live(bindingsClient: bindingsClient), // makeIdentity: .live(bindingsClient: bindingsClient),
connect: .live(bindingsClient: bindingsClient), // connect: .live(bindingsClient: bindingsClient),
waitForDelivery: .live(bindingsClient: bindingsClient) // waitForDelivery: .live(bindingsClient: bindingsClient)
) // )
} // }
} //}
//
#if DEBUG //#if DEBUG
extension Client { //extension Client {
public static let failing = Client( // public static let failing = Client(
getId: .failing, // getId: .failing,
hasRunningProcesses: .failing, // hasRunningProcesses: .failing,
networkFollower: .failing, // networkFollower: .failing,
waitForNetwork: .failing, // waitForNetwork: .failing,
isNetworkHealthy: .failing, // isNetworkHealthy: .failing,
monitorNetworkHealth: .failing, // monitorNetworkHealth: .failing,
listenErrors: .failing, // listenErrors: .failing,
makeIdentity: .failing, // makeIdentity: .failing,
connect: .failing, // connect: .failing,
waitForDelivery: .failing // waitForDelivery: .failing
) // )
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct ClientE2ELogin { //public struct ClientE2ELogin {
public var login: (Client) throws -> ClientE2E // public var login: (Client) throws -> ClientE2E
//
public func callAsFunction(with client: Client) throws -> ClientE2E { // public func callAsFunction(with client: Client) throws -> ClientE2E {
try login(client) // try login(client)
} // }
} //}
//
extension ClientE2ELogin { //extension ClientE2ELogin {
public static let live = ClientE2ELogin { client in // public static let live = ClientE2ELogin { client in
var error: NSError? // var error: NSError?
let cMixId = client.getId() // let cMixId = client.getId()
let myIdentity = try client.makeIdentity() // let myIdentity = try client.makeIdentity()
let encoder = JSONEncoder() // let encoder = JSONEncoder()
let myIdentityData = try encoder.encode(myIdentity) // let myIdentityData = try encoder.encode(myIdentity)
let bindingsClientE2E = BindingsLoginE2e(cMixId, nil, myIdentityData, &error) // let bindingsClientE2E = BindingsLoginE2e(cMixId, nil, myIdentityData, &error)
if let error = error { // if let error = error {
throw error // throw error
} // }
guard let bindingsClientE2E = bindingsClientE2E else { // guard let bindingsClientE2E = bindingsClientE2E else {
fatalError("BindingsLoginE2E returned `nil` without providing error") // fatalError("BindingsLoginE2E returned `nil` without providing error")
} // }
return ClientE2E.live(bindingsClientE2E: bindingsClientE2E) // return ClientE2E.live(bindingsClientE2E: bindingsClientE2E)
} // }
} //}
//
#if DEBUG //#if DEBUG
extension ClientE2ELogin { //extension ClientE2ELogin {
public static let failing = ClientE2ELogin { _ in // public static let failing = ClientE2ELogin { _ in
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
} // }
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct ClientLoader { //public struct ClientLoader {
public var load: (URL, Data) throws -> Client // public var load: (URL, Data) throws -> Client
//
public func callAsFunction(directoryURL: URL, password: Data) throws -> Client { // public func callAsFunction(directoryURL: URL, password: Data) throws -> Client {
try load(directoryURL, password) // try load(directoryURL, password)
} // }
} //}
//
extension ClientLoader { //extension ClientLoader {
public static let live = ClientLoader { directoryURL, password in // public static let live = ClientLoader { directoryURL, password in
var error: NSError? // var error: NSError?
let bindingsClient = BindingsLogin(directoryURL.path, password, &error) // let bindingsClient = BindingsLogin(directoryURL.path, password, &error)
if let error = error { // if let error = error {
throw error // throw error
} // }
guard let bindingsClient = bindingsClient else { // guard let bindingsClient = bindingsClient else {
fatalError("BindingsLogin returned `nil` without providing error") // fatalError("BindingsLogin returned `nil` without providing error")
} // }
return Client.live(bindingsClient: bindingsClient) // return Client.live(bindingsClient: bindingsClient)
} // }
} //}
//
#if DEBUG //#if DEBUG
extension ClientLoader { //extension ClientLoader {
public static let failing = ClientLoader { _, _ in // public static let failing = ClientLoader { _, _ in
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
} // }
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct ClientStorage { //public struct ClientStorage {
public var hasStoredClient: () -> Bool // public var hasStoredClient: () -> Bool
public var createClient: () throws -> Client // public var createClient: () throws -> Client
public var loadClient: () throws -> Client // public var loadClient: () throws -> Client
public var removeClient: () throws -> Void // public var removeClient: () throws -> Void
} //}
//
extension ClientStorage { //extension ClientStorage {
public static let defaultDirectoryURL = FileManager.default // public static let defaultDirectoryURL = FileManager.default
.urls(for: .applicationSupportDirectory, in: .userDomainMask) // .urls(for: .applicationSupportDirectory, in: .userDomainMask)
.first! // .first!
.appendingPathComponent("xx.network.client") // .appendingPathComponent("xx.network.client")
//
public static func live( // public static func live(
environment: Environment = .mainnet, // environment: Environment = .mainnet,
directoryURL: URL = defaultDirectoryURL, // directoryURL: URL = defaultDirectoryURL,
fileManager: FileManager = .default, // fileManager: FileManager = .default,
generatePassword: PasswordGenerator = .live, // generatePassword: PasswordGenerator = .live,
passwordStorage: PasswordStorage, // passwordStorage: PasswordStorage,
downloadNDF: NDFDownloader = .live, // downloadNDF: NDFDownloader = .live,
createClient: ClientCreator = .live, // createClient: ClientCreator = .live,
loadClient: ClientLoader = .live // loadClient: ClientLoader = .live
) -> ClientStorage { // ) -> ClientStorage {
ClientStorage( // ClientStorage(
hasStoredClient: { // hasStoredClient: {
let contents = try? fileManager.contentsOfDirectory(atPath: directoryURL.path) // let contents = try? fileManager.contentsOfDirectory(atPath: directoryURL.path)
return contents.map { $0.isEmpty == false } ?? false // return contents.map { $0.isEmpty == false } ?? false
}, // },
createClient: { // createClient: {
let ndf = try downloadNDF(environment) // let ndf = try downloadNDF(environment)
let password = generatePassword() // let password = generatePassword()
try passwordStorage.save(password) // try passwordStorage.save(password)
try? fileManager.removeItem(at: directoryURL) // try? fileManager.removeItem(at: directoryURL)
try? fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true) // try? fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true)
try createClient(directoryURL: directoryURL, ndf: ndf, password: password) // try createClient(directoryURL: directoryURL, ndf: ndf, password: password)
return try loadClient(directoryURL: directoryURL, password: password) // return try loadClient(directoryURL: directoryURL, password: password)
}, // },
loadClient: { // loadClient: {
let password = try passwordStorage.load() // let password = try passwordStorage.load()
return try loadClient(directoryURL: directoryURL, password: password) // return try loadClient(directoryURL: directoryURL, password: password)
}, // },
removeClient: { // removeClient: {
try fileManager.removeItem(at: directoryURL) // try fileManager.removeItem(at: directoryURL)
} // }
) // )
} // }
} //}
//
#if DEBUG //#if DEBUG
extension ClientStorage { //extension ClientStorage {
public static let failing = ClientStorage( // public static let failing = ClientStorage(
hasStoredClient: { false }, // hasStoredClient: { false },
createClient: { // createClient: {
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
}, // },
loadClient: { // loadClient: {
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
}, // },
removeClient: { // removeClient: {
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
} // }
) // )
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct Connection { //public struct Connection {
public var getId: ConnectionIdProvider // public var getId: ConnectionIdProvider
public var isAuthenticated: ConnectionAuthStatusProvider // public var isAuthenticated: ConnectionAuthStatusProvider
public var getPartner: ConnectionPartnerProvider // public var getPartner: ConnectionPartnerProvider
public var send: MessageSender // public var send: MessageSender
public var listen: MessageListener // public var listen: MessageListener
public var close: ConnectionCloser // public var close: ConnectionCloser
} //}
//
extension Connection { //extension Connection {
public static func live( // public static func live(
bindingsConnection: BindingsConnection // bindingsConnection: BindingsConnection
) -> Connection { // ) -> Connection {
Connection( // Connection(
getId: .live(bindingsConnection: bindingsConnection), // getId: .live(bindingsConnection: bindingsConnection),
isAuthenticated: .live(bindingsConnection: bindingsConnection), // isAuthenticated: .live(bindingsConnection: bindingsConnection),
getPartner: .live(bindingsConnection: bindingsConnection), // getPartner: .live(bindingsConnection: bindingsConnection),
send: .live(bindingsConnection: bindingsConnection), // send: .live(bindingsConnection: bindingsConnection),
listen: .live(bindingsConnection: bindingsConnection), // listen: .live(bindingsConnection: bindingsConnection),
close: .live(bindingsConnection: bindingsConnection) // close: .live(bindingsConnection: bindingsConnection)
) // )
} // }
//
public static func live( // public static func live(
bindingsAuthenticatedConnection: BindingsAuthenticatedConnection // bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
) -> Connection { // ) -> Connection {
Connection( // Connection(
getId: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection), // getId: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
isAuthenticated: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection), // isAuthenticated: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
getPartner: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection), // getPartner: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
send: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection), // send: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
listen: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection), // listen: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
close: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection) // close: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection)
) // )
} // }
} //}
//
#if DEBUG //#if DEBUG
extension Connection { //extension Connection {
public static let failing = Connection( // public static let failing = Connection(
getId: .failing, // getId: .failing,
isAuthenticated: .failing, // isAuthenticated: .failing,
getPartner: .failing, // getPartner: .failing,
send: .failing, // send: .failing,
listen: .failing, // listen: .failing,
close: .failing // close: .failing
) // )
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct ConnectionMaker { //public struct ConnectionMaker {
public var connect: (Bool, Data, Int) throws -> Connection // public var connect: (Bool, Data, Int) throws -> Connection
//
public func callAsFunction( // public func callAsFunction(
withAuthentication: Bool, // withAuthentication: Bool,
recipientContact: Data, // recipientContact: Data,
e2eId: Int // e2eId: Int
) throws -> Connection { // ) throws -> Connection {
try connect(withAuthentication, recipientContact, e2eId) // try connect(withAuthentication, recipientContact, e2eId)
} // }
} //}
//
extension ConnectionMaker { //extension ConnectionMaker {
public static func live(bindingsClient: BindingsCmix) -> ConnectionMaker { // public static func live(bindingsClient: BindingsCmix) -> ConnectionMaker {
ConnectionMaker { withAuthentication, recipientContact, e2eId in // ConnectionMaker { withAuthentication, recipientContact, e2eId in
if withAuthentication { // if withAuthentication {
return Connection.live( // return Connection.live(
bindingsAuthenticatedConnection: try bindingsClient.connect( // bindingsAuthenticatedConnection: try bindingsClient.connect(
withAuthentication: e2eId, // withAuthentication: e2eId,
recipientContact: recipientContact // recipientContact: recipientContact
) // )
) // )
} else { // } else {
return Connection.live( // return Connection.live(
bindingsConnection: try bindingsClient.connect( // bindingsConnection: try bindingsClient.connect(
e2eId, // e2eId,
recipientContact: recipientContact // recipientContact: recipientContact
) // )
) // )
} // }
} // }
} // }
} //}
//
#if DEBUG //#if DEBUG
extension ConnectionMaker { //extension ConnectionMaker {
public static let failing = ConnectionMaker { _, _, _ in // public static let failing = ConnectionMaker { _, _, _ in
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
} // }
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct MessageListener { //public struct MessageListener {
public var listen: (Int, String, @escaping (Message) -> Void) -> Void // public var listen: (Int, String, @escaping (Message) -> Void) -> Void
//
public func callAsFunction( // public func callAsFunction(
messageType: Int, // messageType: Int,
listenerName: String = "MessageListener", // listenerName: String = "MessageListener",
callback: @escaping (Message) -> Void // callback: @escaping (Message) -> Void
) { // ) {
listen(messageType, listenerName, callback) // listen(messageType, listenerName, callback)
} // }
} //}
//
extension MessageListener { //extension MessageListener {
public static func live( // public static func live(
bindingsConnection: BindingsConnection // bindingsConnection: BindingsConnection
) -> MessageListener { // ) -> MessageListener {
MessageListener.live( // MessageListener.live(
register: bindingsConnection.registerListener(_:newListener:) // register: bindingsConnection.registerListener(_:newListener:)
) // )
} // }
//
public static func live( // public static func live(
bindingsAuthenticatedConnection: BindingsAuthenticatedConnection // bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
) -> MessageListener { // ) -> MessageListener {
MessageListener.live( // MessageListener.live(
register: bindingsAuthenticatedConnection.registerListener(_:newListener:) // register: bindingsAuthenticatedConnection.registerListener(_:newListener:)
) // )
} // }
//
private static func live( // private static func live(
register: @escaping (Int, BindingsListenerProtocol) -> Void // register: @escaping (Int, BindingsListenerProtocol) -> Void
) -> MessageListener { // ) -> MessageListener {
MessageListener { messageType, listenerName, callback in // MessageListener { messageType, listenerName, callback in
register(messageType, Listener(listenerName: listenerName, onHear: callback)) // register(messageType, Listener(listenerName: listenerName, onHear: callback))
} // }
} // }
} //}
//
private class Listener: NSObject, BindingsListenerProtocol { //private class Listener: NSObject, BindingsListenerProtocol {
init(listenerName: String, onHear: @escaping (Message) -> Void) { // init(listenerName: String, onHear: @escaping (Message) -> Void) {
self.listenerName = listenerName // self.listenerName = listenerName
self.onHear = onHear // self.onHear = onHear
super.init() // super.init()
} // }
//
let listenerName: String // let listenerName: String
let onHear: (Message) -> Void // let onHear: (Message) -> Void
let decoder = JSONDecoder() // let decoder = JSONDecoder()
//
func hear(_ item: Data?) { // func hear(_ item: Data?) {
guard let item = item else { // guard let item = item else {
fatalError("BindingsListenerProtocol.hear received `nil`") // fatalError("BindingsListenerProtocol.hear received `nil`")
} // }
do { // do {
onHear(try decoder.decode(Message.self, from: item)) // onHear(try decoder.decode(Message.self, from: item))
} catch { // } catch {
fatalError("Message decoding failed with error: \(error)") // fatalError("Message decoding failed with error: \(error)")
} // }
} // }
//
func name() -> String { // func name() -> String {
listenerName // listenerName
} // }
} //}
//
#if DEBUG //#if DEBUG
extension MessageListener { //extension MessageListener {
public static let failing = MessageListener { _, _, _ in // public static let failing = MessageListener { _, _, _ in
fatalError("Not implemented") // fatalError("Not implemented")
} // }
} //}
#endif //#endif
import Bindings //import Bindings
//
public struct RestlikeRequestSender { //public struct RestlikeRequestSender {
public var send: (Int, Int, RestlikeMessage) throws -> RestlikeMessage // public var send: (Int, Int, RestlikeMessage) throws -> RestlikeMessage
//
public func callAsFunction( // public func callAsFunction(
clientId: Int, // clientId: Int,
connectionId: Int, // connectionId: Int,
request: RestlikeMessage // request: RestlikeMessage
) throws -> RestlikeMessage { // ) throws -> RestlikeMessage {
try send(clientId, connectionId, request) // try send(clientId, connectionId, request)
} // }
} //}
//
extension RestlikeRequestSender { //extension RestlikeRequestSender {
public static func live(authenticated: Bool) -> RestlikeRequestSender { // public static func live(authenticated: Bool) -> RestlikeRequestSender {
RestlikeRequestSender { clientId, connectionId, request in // RestlikeRequestSender { clientId, connectionId, request in
let encoder = JSONEncoder() // let encoder = JSONEncoder()
let requestData = try encoder.encode(request) // let requestData = try encoder.encode(request)
var error: NSError? // var error: NSError?
let responseData: Data? // let responseData: Data?
if authenticated { // if authenticated {
responseData = BindingsRestlikeRequestAuth(clientId, connectionId, requestData, &error) // responseData = BindingsRestlikeRequestAuth(clientId, connectionId, requestData, &error)
} else { // } else {
responseData = BindingsRestlikeRequest(clientId, connectionId, requestData, &error) // responseData = BindingsRestlikeRequest(clientId, connectionId, requestData, &error)
} // }
if let error = error { // if let error = error {
throw error // throw error
} // }
guard let responseData = responseData else { // guard let responseData = responseData else {
let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")" // let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
fatalError("\(functionName) returned `nil` without providing error") // fatalError("\(functionName) returned `nil` without providing error")
} // }
let decoder = JSONDecoder() // let decoder = JSONDecoder()
let response = try decoder.decode(RestlikeMessage.self, from: responseData) // let response = try decoder.decode(RestlikeMessage.self, from: responseData)
return response // return response
} // }
} // }
} //}
//
#if DEBUG //#if DEBUG
extension RestlikeRequestSender { //extension RestlikeRequestSender {
public static let failing = RestlikeRequestSender { _, _, _ in // public static let failing = RestlikeRequestSender { _, _, _ in
struct NotImplemented: Error {} // struct NotImplemented: Error {}
throw NotImplemented() // throw NotImplemented()
} // }
} //}
#endif //#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