adapt 3 swift

This commit is contained in:
badim 2016-09-23 20:43:48 +03:00
parent 7578c5c2e6
commit 0cc0c5332e
9 changed files with 115 additions and 109 deletions

View File

@ -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),
]
)

View File

@ -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)!)
}
}

View File

@ -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<Void>?
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)
}
}
}

View File

@ -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)
}
}
}

View File

@ -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<Void>, size: Int, hint: UnsafeMutablePointer<Void>? = nil, ffn: @convention(c) (UnsafeMutablePointer<Void>?, UnsafeMutablePointer<Void>?) -> 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<Void>, 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<Void> {
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
}
}
}

View File

@ -38,26 +38,26 @@ public struct PollEvent : OptionSet {
}
public enum PollItemEvent {
case Socket(socket: UnsafeMutablePointer<Void>, 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)
}
}

View File

@ -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)
}
}

View File

@ -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<Void>
let socket: UnsafeMutableRawPointer
init(socket: UnsafeMutablePointer<Void>) {
init(socket: UnsafeMutableRawPointer) {
self.socket = socket
}
@ -57,27 +57,27 @@ public final class Socket {
zmq_close(socket)
}
func setOption(_ option: Int32, value: UnsafePointer<Void>?, 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<Void>, length: UnsafeMutablePointer<Int>) throws {
func getOption(_ option: Int32, value: UnsafeMutableRawPointer, length: UnsafeMutablePointer<Int>) 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<Void>, 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<Void>, 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)
}
}
}

View File

@ -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),
]