测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可协议 | MIT |
发布上次发布 | 2016年10月 |
SPM支持 SPM | ✗ |
由 Yossi Abraham 支持。
依赖项 | |
SwiftyJSON | ~> 3.1.0 |
Starscream | ~> 2.0.0 |
CryptoSwift | ~> 0.6.0 |
Swamp 是 Swift 中的 WAMP 实现。
它目前支持调用远程过程,订阅主题,和发布事件。它也支持使用票据和 wampcra 进行身份验证。
Swamp 使用 WebSockets 作为其唯一可用的传输方式,JSON 作为其序列化方法。
欢迎合并支持 MessagePack 和原始套接字的消息贡献!
Swift 版本 | Swamp 版本 | 需求 |
---|---|---|
2.x | 0.1.x | OSX 10.9 或 iOS 8.0 |
3 | 0.2.0 及以上 | OSX 10.10 或 iOS 8.0 |
Swamp 通过 cocoapods 提供。将以下代码添加到 Podfile 中。(对于 Swift 2 使用 '~> 0.1.0'
)。
pod 'Swamp', '~> 0.2.0'
到您的 Podfile 中。(对于 Swift 2 使用 '~> 0.1.0'
)
import Swamp
let swampTransport = WebSocketSwampTransport(wsEndpoint: NSURL(string: "ws://my-router.com:8080/ws")!)
let swampSession = SwampSession(realm: "router-defined-realm", transport: swampTransport)
// Set delegate for callbacks
// swampSession.delegate = <SwampSessionDelegate implementation>
swampSession.connect()
swampSession.disconnect()
realm
- 要加入的范围transport
- 一个 SwampTransport
实现authmethods
authid
authrole
authextra
- 查看您的路由器文档并相应使用connect()
- 建立传输并执行配置的身份验证disconnect()
- 相反。现在您应该等待您的代理回调
实现以下方法
func swampSessionHandleChallenge(authMethod: String, extra: [String: AnyObject]) -> String
wampcra
身份验证方法: return SwampCraAuthHelper.sign("your-secret", extra["challenge"] as! String)
。func swampSessionConnected(session: SwampSession, sessionId: Int)
func swampSessionEnded(reason: String)
reason
通常是WAMP领域的错误,但也可以是关于WTF发生了什么的文字描述。调用可能触发两个回调
onSuccess
- 如果调用没有错误地完成。onError
- 如果调用失败。 (无论是路由器还是对等客户端。)public func call(proc: String, options: [String: AnyObject]=[:], args: [AnyObject]?=nil, kwargs: [String: AnyObject]?=nil, onSuccess: CallCallback, onError: ErrorCallCallback)
session.call("wamp.procedure", args: [1, "argument1"],
onSuccess: { details, results, kwResults in
// Usually result is in results[0], but do a manual check in your infrastructure
},
onError: { details, error, args, kwargs in
// Handle your error here (You can ignore args kwargs in most cases)
})
session.call("wamp.procedure", options: ["disclose_me": true], args: [1, "argument1"], kwargs: ["arg1": 1, "arg2": "argument2"],
onSuccess: { details, results, kwResults in
// Usually result is in results[0], but do a manual check in your infrastructure
},
onError: { details, error, args, kwargs in
// Handle your error here (You can ignore args kwargs in most cases)
})
订阅可能触发三个回调
onSuccess
- 如果订阅成功。onError
- 如果没有成功。onEvent
- 如果成功,当实际事件被发布时触发。public func subscribe(topic: String, options: [String: AnyObject]=[:], onSuccess: SubscribeCallback, onError: ErrorSubscribeCallback, onEvent: EventCallback)
session.subscribe("wamp.topic", onSuccess: { subscription in
// subscription can be stored for subscription.cancel()
}, onError: { details, error in
}, onEvent: { details, results, kwResults in
// Event data is usually in results, but manually check blabla yadayada
})
session.subscribe("wamp.topic", options: ["disclose_me": true],
onSuccess: { subscription in
// subscription can be stored for subscription.cancel()
}, onError: { details, error in
// handle error
}, onEvent: { details, results, kwResults in
// Event data is usually in results, but manually check blabla yadayada
})
发布既可以在没有回调的情况下调用(称为未确认),也可以使用以下两个回调
onSuccess
- 如果发布成功。onError
- 如果没有成功。// without acknowledging
public func publish(topic: String, options: [String: AnyObject]=[:], args: [AnyObject]?=nil, kwargs: [String: AnyObject]?=nil)
// with acknowledging
public func publish(topic: String, options: [String: AnyObject]=[:], args: [AnyObject]?=nil, kwargs: [String: AnyObject]?=nil, onSuccess: PublishCallback, onError: ErrorPublishCallback) {
session.publish("wamp.topic", args: [1, "argument2"])
session.publish("wamp.topic", options: ["disclose_me": true], args: [1, "argument2"], kwargs: ["arg1": 1, "arg2": "argument2"],
onSuccess: {
// Publication has been published!
}, onError: { details, error in
// Handle error (What can it be except wamp.error.not_authorized?)
})
目前,只存在针对crossbar的集成测试。我计划将来添加单元测试。
要运行测试
Example/Swamp.xcworkspace
Swamp_Test-iOS
或Swamp_Test-OSX
Product -> Test
或⌘U)如果由于某些原因测试失败,请确保
/usr/local/bin/docker
使用docker您还可以检查Example/swamp-crossbar-instance.log
以了解在测试执行过程中crossbar实例发生了什么。
我不在乎,是MIT,因为它是pod lib create
的默认设置,而且我太懒惰去看tldrlegal。