From 0cc0c5332ea7b522cfdbd6d4c04d872f25c0adf5 Mon Sep 17 00:00:00 2001 From: badim Date: Fri, 23 Sep 2016 20:43:48 +0300 Subject: [PATCH] adapt 3 swift --- Package.swift | 4 +- Sources/CURVE.swift | 4 +- Sources/Context.swift | 84 +++++++++---------- Sources/Error.swift | 6 +- Sources/Message.swift | 24 +++--- Sources/Poller.swift | 16 ++-- Sources/Proxy.swift | 4 +- Sources/Socket.swift | 78 +++++++++-------- Tests/{ZeroMQ => MainTests}/ZeroMQTests.swift | 4 +- 9 files changed, 115 insertions(+), 109 deletions(-) rename Tests/{ZeroMQ => MainTests}/ZeroMQTests.swift (83%) diff --git a/Package.swift b/Package.swift index 81577b2..9cd6d9b 100644 --- a/Package.swift +++ b/Package.swift @@ -3,7 +3,7 @@ import PackageDescription let package = Package( name: "ZeroMQ", dependencies: [ - .Package(url: "https://github.com/open-swift/C7.git", majorVersion: 0, minor: 7), - .Package(url: "https://github.com/Zewo/CZeroMQ.git", majorVersion: 0, minor: 5), + .Package(url: "https://github.com/Zewo/Core.git", majorVersion: 0, minor: 13), + .Package(url: "https://github.com/Zewo/CZeroMQ.git", majorVersion: 1, minor: 0), ] ) diff --git a/Sources/CURVE.swift b/Sources/CURVE.swift index 0ea42a7..fffaf00 100644 --- a/Sources/CURVE.swift +++ b/Sources/CURVE.swift @@ -29,8 +29,8 @@ public func CURVEKeyPair() throws -> (publicKey: String, secretKey: String) { var secretKey = [Int8](repeating: 0, count: 41) if zmq_curve_keypair(&publicKey, &secretKey) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return (String(validatingUTF8: publicKey)!, String(validatingUTF8: secretKey)!) -} \ No newline at end of file +} diff --git a/Sources/Context.swift b/Sources/Context.swift index 14b051c..35fe68b 100644 --- a/Sources/Context.swift +++ b/Sources/Context.swift @@ -25,18 +25,18 @@ import CZeroMQ public enum SocketType { - case Req - case Rep - case Dealer - case Router - case Pub - case Sub - case XPub - case XSub - case Push - case Pull - case Pair - case Stream + case req + case rep + case dealer + case router + case pub + case sub + case xPub + case xSub + case push + case pull + case pair + case stream // case Server // case Client } @@ -44,18 +44,18 @@ public enum SocketType { extension SocketType { init?(rawValue: Int32) { switch rawValue { - case ZMQ_REQ: self = Req - case ZMQ_REP: self = Rep - case ZMQ_DEALER: self = Dealer - case ZMQ_ROUTER: self = Router - case ZMQ_PUB: self = Pub - case ZMQ_SUB: self = Sub - case ZMQ_XPUB: self = XPub - case ZMQ_XSUB: self = XSub - case ZMQ_PUSH: self = Push - case ZMQ_PULL: self = Pull - case ZMQ_PAIR: self = Pair - case ZMQ_STREAM: self = Stream + case ZMQ_REQ: self = .req + case ZMQ_REP: self = .rep + case ZMQ_DEALER: self = .dealer + case ZMQ_ROUTER: self = .router + case ZMQ_PUB: self = .pub + case ZMQ_SUB: self = .sub + case ZMQ_XPUB: self = .xPub + case ZMQ_XSUB: self = .xSub + case ZMQ_PUSH: self = .push + case ZMQ_PULL: self = .pull + case ZMQ_PAIR: self = .pair + case ZMQ_STREAM: self = .stream // case ZMQ_SERVER: self = Server // case ZMQ_CLIENT: self = Client @@ -67,18 +67,18 @@ extension SocketType { extension SocketType { var rawValue: Int32 { switch self { - case .Req: return ZMQ_REQ - case .Rep: return ZMQ_REP - case .Dealer: return ZMQ_DEALER - case .Router: return ZMQ_ROUTER - case .Pub: return ZMQ_PUB - case .Sub: return ZMQ_SUB - case .XPub: return ZMQ_XPUB - case .XSub: return ZMQ_XSUB - case .Push: return ZMQ_PUSH - case .Pull: return ZMQ_PULL - case .Pair: return ZMQ_PAIR - case .Stream: return ZMQ_STREAM + case .req: return ZMQ_REQ + case .rep: return ZMQ_REP + case .dealer: return ZMQ_DEALER + case .router: return ZMQ_ROUTER + case .pub: return ZMQ_PUB + case .sub: return ZMQ_SUB + case .xPub: return ZMQ_XPUB + case .xSub: return ZMQ_XSUB + case .push: return ZMQ_PUSH + case .pull: return ZMQ_PULL + case .pair: return ZMQ_PAIR + case .stream: return ZMQ_STREAM // case .Server: return ZMQ_SERVER // case .Client: return ZMQ_CLIENT } @@ -86,13 +86,13 @@ extension SocketType { } public final class Context { - let context: UnsafeMutablePointer? + let context: UnsafeMutableRawPointer? public init() throws { context = zmq_ctx_new() if context == nil { - throw Error.lastError + throw ZeroMqError.lastError } } @@ -100,7 +100,7 @@ public final class Context { context = zmq_ctx_new() if context == nil { - throw Error.lastError + throw ZeroMqError.lastError } self.IOThreads = IOThreads @@ -112,7 +112,7 @@ public final class Context { public func terminate() throws { if zmq_ctx_term(context) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } @@ -127,7 +127,7 @@ public final class Context { public func socket(_ type: SocketType) throws -> Socket { guard let socket = zmq_socket(context, type.rawValue) else { - throw Error.lastError + throw ZeroMqError.lastError } return Socket(socket: socket) @@ -182,4 +182,4 @@ extension Context { public func setThreadPriority(_ value: Int32) { setOption(ZMQ_THREAD_PRIORITY, value: value) } -} \ No newline at end of file +} diff --git a/Sources/Error.swift b/Sources/Error.swift index a5da14f..f4a67b9 100644 --- a/Sources/Error.swift +++ b/Sources/Error.swift @@ -24,11 +24,11 @@ import CZeroMQ -public struct Error : ErrorProtocol, CustomStringConvertible { +public struct ZeroMqError : Error, CustomStringConvertible { public let description: String static var lastError: Error { let description = String(validatingUTF8: zmq_strerror(zmq_errno()))! - return Error(description: description) + return ZeroMqError(description: description) } -} \ No newline at end of file +} diff --git a/Sources/Message.swift b/Sources/Message.swift index 0bd20cc..c043fa3 100644 --- a/Sources/Message.swift +++ b/Sources/Message.swift @@ -31,7 +31,7 @@ public final class Message { message = zmq_msg_t() if zmq_msg_init(&message) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } @@ -39,23 +39,23 @@ public final class Message { message = zmq_msg_t() if zmq_msg_init_size(&message, size) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } - public init(data: UnsafeMutablePointer, size: Int, hint: UnsafeMutablePointer? = nil, ffn: @convention(c) (UnsafeMutablePointer?, UnsafeMutablePointer?) -> Void) throws { + public init(data: UnsafeMutableRawPointer, size: Int, hint: UnsafeMutableRawPointer? = nil, ffn: @escaping @convention(c) (UnsafeMutableRawPointer?, UnsafeMutableRawPointer?) -> Void) throws { message = zmq_msg_t() if zmq_msg_init_data(&message, data, size, ffn, hint) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } - public init(data: UnsafeMutablePointer, size: Int) throws { + public init(data: UnsafeMutableRawPointer, size: Int) throws { message = zmq_msg_t() if zmq_msg_init_data(&message, data, size, nil, nil) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } @@ -73,7 +73,7 @@ public final class Message { public func getProperty(_ property: String) throws -> String { guard let result = zmq_msg_gets(&message, property) else { - throw Error.lastError + throw ZeroMqError.lastError } return String(validatingUTF8: result)! @@ -81,11 +81,11 @@ public final class Message { public func close() throws { if zmq_msg_close(&message) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } - public var data: UnsafeMutablePointer { + public var data: UnsafeMutableRawPointer { return zmq_msg_data(&message) } @@ -101,7 +101,7 @@ public final class Message { let message = try Message() if zmq_msg_copy(&message.message, &self.message) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return message @@ -111,7 +111,7 @@ public final class Message { let message = try Message() if zmq_msg_move(&message.message, &self.message) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } } @@ -124,4 +124,4 @@ extension Message { public var shared: Bool { return getProperty(ZMQ_SHARED) != 0 } -} \ No newline at end of file +} diff --git a/Sources/Poller.swift b/Sources/Poller.swift index 564d3a7..48067f8 100644 --- a/Sources/Poller.swift +++ b/Sources/Poller.swift @@ -38,26 +38,26 @@ public struct PollEvent : OptionSet { } public enum PollItemEvent { - case Socket(socket: UnsafeMutablePointer, events: PollEvent) - case FileDescriptor(fileDescriptor: Int32, events: PollEvent) + case socket(socket: UnsafeMutableRawPointer, events: PollEvent) + case fileDescriptor(fileDescriptor: Int32, events: PollEvent) var pollItem: zmq_pollitem_t { switch self { - case Socket(let socket, let events): + case .socket(let socket, let events): return zmq_pollitem_t(socket: socket, fd: 0, events: events.rawValue, revents: 0) - case FileDescriptor(let fileDescriptor, let events): + case .fileDescriptor(let fileDescriptor, let events): return zmq_pollitem_t(socket: nil, fd: fileDescriptor, events: events.rawValue, revents: 0) } } init(pollItem: zmq_pollitem_t) { if pollItem.socket != nil { - self = Socket( + self = .socket( socket: pollItem.socket, events: PollEvent(rawValue: pollItem.revents) ) } else { - self = FileDescriptor( + self = .fileDescriptor( fileDescriptor: pollItem.fd, events: PollEvent(rawValue: pollItem.revents) ) @@ -69,8 +69,8 @@ public func poll(_ items: PollItemEvent..., timeout: Int) throws -> [PollItemEve var pollItems = items.map { $0.pollItem } if zmq_poll(&pollItems, Int32(pollItems.count), timeout) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return pollItems.map(PollItemEvent.init) -} \ No newline at end of file +} diff --git a/Sources/Proxy.swift b/Sources/Proxy.swift index 348490d..048638c 100644 --- a/Sources/Proxy.swift +++ b/Sources/Proxy.swift @@ -24,6 +24,6 @@ import CZeroMQ -public func proxy(frontend: Socket, backend: Socket, capture: Socket? = nil) { +public func proxy(_ frontend: Socket, backend: Socket, capture: Socket? = nil) { zmq_proxy(frontend.socket, backend.socket, capture?.socket ?? nil) -} \ No newline at end of file +} diff --git a/Sources/Socket.swift b/Sources/Socket.swift index 19684e3..60ad344 100644 --- a/Sources/Socket.swift +++ b/Sources/Socket.swift @@ -23,7 +23,7 @@ // SOFTWARE. import CZeroMQ -import C7 +import Core public struct SendMode : OptionSet { public let rawValue: Int @@ -47,9 +47,9 @@ public struct ReceiveMode : OptionSet { } public final class Socket { - let socket: UnsafeMutablePointer + let socket: UnsafeMutableRawPointer - init(socket: UnsafeMutablePointer) { + init(socket: UnsafeMutableRawPointer) { self.socket = socket } @@ -57,27 +57,27 @@ public final class Socket { zmq_close(socket) } - func setOption(_ option: Int32, value: UnsafePointer?, length: Int) throws { + func setOption(_ option: Int32, value: UnsafeRawPointer?, length: Int) throws { if zmq_setsockopt(socket, option, value, length) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } - func getOption(_ option: Int32, value: UnsafeMutablePointer, length: UnsafeMutablePointer) throws { + func getOption(_ option: Int32, value: UnsafeMutableRawPointer, length: UnsafeMutablePointer) throws { if zmq_getsockopt(socket, option, value, length) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } public func bind(_ endpoint: String) throws { if zmq_bind(socket, endpoint) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } public func connect(_ endpoint: String) throws { if zmq_connect(socket, endpoint) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } @@ -89,13 +89,13 @@ public final class Socket { } if result == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return true } - func send(_ buffer: UnsafeMutablePointer, length: Int, mode: SendMode = []) throws -> Bool { + func send(_ buffer: UnsafeMutableRawPointer, length: Int, mode: SendMode = []) throws -> Bool { let result = zmq_send(socket, buffer, length, Int32(mode.rawValue)) if result == -1 && zmq_errno() == EAGAIN { @@ -103,17 +103,19 @@ public final class Socket { } if result == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return true } public func send(_ data: Data, mode: SendMode = []) throws -> Bool { var data = data - return try self.send(&data.bytes, length: data.count, mode: mode) + return try data.withUnsafeMutableBytes { bytes in + return try self.send(bytes, length: data.count, mode: mode) + } } - func sendImmutable(_ buffer: UnsafePointer, length: Int, mode: SendMode = []) throws -> Bool { + func sendImmutable(_ buffer: UnsafeRawPointer, length: Int, mode: SendMode = []) throws -> Bool { let result = zmq_send_const(socket, buffer, length, Int32(mode.rawValue)) if result == -1 && zmq_errno() == EAGAIN { @@ -121,7 +123,7 @@ public final class Socket { } if result == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return true @@ -136,21 +138,23 @@ public final class Socket { } if result == -1 { - throw Error.lastError + throw ZeroMqError.lastError } return message } public func receive(_ bufferSize: Int = 1024, mode: ReceiveMode = []) throws -> Data? { - var data = Data.buffer(with: bufferSize) - let result = zmq_recv(socket, &data.bytes, bufferSize, Int32(mode.rawValue)) + var data = Data(count: bufferSize) + let result = data.withUnsafeMutableBytes { bytes in + return zmq_recv(socket, bytes, bufferSize, Int32(mode.rawValue)) + } if result == -1 && zmq_errno() == EAGAIN { return nil } if result == -1 { - throw Error.lastError + throw ZeroMqError.lastError } let bufferEnd = min(Int(result), bufferSize) return Data(data[0 ..< bufferEnd]) @@ -158,13 +162,13 @@ public final class Socket { public func close() throws { if zmq_close(socket) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } public func monitor(_ endpoint: String, events: SocketEvent) throws { if zmq_socket_monitor(socket, endpoint, events.rawValue) == -1 { - throw Error.lastError + throw ZeroMqError.lastError } } } @@ -193,11 +197,11 @@ public struct SocketEvent : OptionSet { extension Socket { func setOption(_ option: Int32, _ value: Bool) throws { var value = value ? 1 : 0 - try setOption(option, value: &value, length: strideof(Int32)) + try setOption(option, value: &value, length: strideof(Int32.self)) } func setOption(_ option: Int32, _ value: Int32) throws { var value = value - try setOption(option, value: &value, length: strideof(Int32)) + try setOption(option, value: &value, length: strideof(Int32.self)) } func setOption(_ option: Int32, _ value: String) throws { try value.withCString { v in @@ -205,7 +209,9 @@ extension Socket { } } func setOption(_ option: Int32, _ value: Data) throws { - try setOption(option, value: value.bytes, length: value.count) + try value.withUnsafeBytes { bytes in + try setOption(option, value: bytes, length: value.count) + } } func setOption(_ option: Int32, _ value: String?) throws { if let value = value { @@ -221,7 +227,7 @@ extension Socket { extension Socket { public func setAffinity(_ value: UInt64) throws { var value = value - try setOption(ZMQ_AFFINITY, value: &value, length: strideof(UInt64)) + try setOption(ZMQ_AFFINITY, value: &value, length: strideof(UInt64.self)) } public func setBacklog(_ value: Int32) throws { @@ -310,7 +316,7 @@ extension Socket { public func setMaxMessageSize(_ value: Int64) throws { var value = value - try setOption(ZMQ_MAXMSGSIZE, value: &value, length: strideof(Int64)) + try setOption(ZMQ_MAXMSGSIZE, value: &value, length: strideof(Int64.self)) } public func setMulticastHops(_ value: Int32) throws { @@ -457,7 +463,7 @@ extension Socket { extension Socket { func getOption(_ option: Int32) throws -> Int32 { var value: Int32 = 0 - var length = strideof(Int32) + var length = strideof(Int32.self) try getOption(option, value: &value, length: &length) return value } @@ -476,7 +482,7 @@ extension Socket { extension Socket { public func getAffinity() throws -> UInt64 { var value: UInt64 = 0 - var length = strideof(UInt64) + var length = strideof(UInt64.self) try getOption(ZMQ_AFFINITY, value: &value, length: &length) return value } @@ -560,7 +566,7 @@ extension Socket { public func getMaxMessageSize() throws -> Int64 { var value: Int64 = 0 - var length = strideof(Int64) + var length = strideof(Int64.self) try getOption(ZMQ_MAXMSGSIZE, value: &value, length: &length) return value } @@ -672,17 +678,17 @@ extension Socket { } public enum SecurityMechanism { - case Null - case Plain - case CURVE + case null + case plain + case curve } extension SecurityMechanism { init?(rawValue: Int32) { switch rawValue { - case ZMQ_NULL: self = Null - case ZMQ_PLAIN: self = Plain - case ZMQ_CURVE: self = CURVE + case ZMQ_NULL: self = .null + case ZMQ_PLAIN: self = .plain + case ZMQ_CURVE: self = .curve default: return nil } } @@ -699,4 +705,4 @@ extension Socket { } return try? String(data: buffer) } -} \ No newline at end of file +} diff --git a/Tests/ZeroMQ/ZeroMQTests.swift b/Tests/MainTests/ZeroMQTests.swift similarity index 83% rename from Tests/ZeroMQ/ZeroMQTests.swift rename to Tests/MainTests/ZeroMQTests.swift index 5ef81da..50a8111 100644 --- a/Tests/ZeroMQ/ZeroMQTests.swift +++ b/Tests/MainTests/ZeroMQTests.swift @@ -16,7 +16,7 @@ class ZeroMQTests: XCTestCase { try outbound.sendString("Hello World!") try outbound.sendString("Bye!") - while let data = try inbound.receiveString() where data != "Bye!" { + while let data = try inbound.receiveString() , data != "Bye!" { called = true XCTAssert(data == "Hello World!") } @@ -28,7 +28,7 @@ class ZeroMQTests: XCTestCase { } extension ZeroMQTests { - static var allTests: [(String, ZeroMQTests -> () throws -> Void)] { + static var allTests: [(String, (ZeroMQTests) -> () throws -> Void)] { return [ ("testPushPull", testPushPull), ]