测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年10月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Dany Sousa 维护。
依赖项 | |
SwiftyJSON | >= 0 |
Starscream | >= 0 |
CryptoSwift | >= 0 |
SwiftWebSocket | >= 0 |
SwiftWamp 是在 Swift 中实现的 WAMP。
SwiftWamp 基于 Swamp 0.1.0。
它目前支持调用和注册远程过程、订阅主题和发布事件。它还支持使用 ticket & wampcra 进行身份验证。
SwiftWamp 0.3.1
使用 WebSockets 作为其唯一的传输方式,并使用 JSON 作为其序列化方法。
欢迎贡献!
iOS 8.0
SwiftWamp 通过 cocoapods 提供。
pod "SwiftWamp"
到您的 Podfile。
import SwiftWamp
do {
let url = try "ws://my-router.com:8080/ws".asURL()
let transport = WebSocketSwampTransport(wsEndpoint: url)
let session = SwampSession(realm: "router-defined-realm", transport: transport)
// Set delegate for callbacks
// swampSession.delegate = <SwampSessionDelegate implementation>
session.connect()
session.disconnect()
}
catch {
print("Invalid url format")
}
import SwiftWamp
let transport = SwiftWebSocketTransport(wsEndpoint: "ws://my-router.com:8080/ws", compression: true)
let session = SwampSession(realm: "router-defined-realm", transport: transport)
// Set delegate for callbacks
// swampSession.delegate = <SwampSessionDelegate implementation>
session.connect()
session.disconnect()
realm
- 要加入的领域transport
- 一个 SwampTransport
实现authmethods
authid
authrole
authextra
- 查看您的路由器文档并相应使用connect()
- 建立传输并执行配置的身份验证。disconnect()
- 相反。现在您应该等待您的代理的回调
实现以下方法
func swampSessionHandleChallenge(authMethod: String, extra: [String: Any]) -> String
SwampCraAuthHelper.sign("your-secret", extra["challenge"] as! String)
来支持 wampcra
身份验证方法。func swampSessionConnected(session: SwampSession, sessionId: Int)
func swampSessionEnded(reason: String)
reason
通常是 WAMP 领域错误,但它也可以是发生了什么的文本描述订阅可能会触发三个回调
onSuccess
- 如果订阅成功。onError
- 如果没有成功。onEvent
- 如果成功,这是当实际事件发布时触发的。public func subscribe(_ topic: String,
options: [String: Any] = [:],
using queue: DispatchQueue = .main,
onSuccess: @escaping SubscribeCallback,
onError: @escaping ErrorSubscribeCallback,
onEvent: @escaping 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
})
发布可以是无需回调(即不确认)的,也可以使用以下两个回调
onError
- 如果没有成功。// without acknowledging
public func publish(_ topic: String,
options: [String: Any] = [:],
args: [Any]? = nil,
kwargs: [String: Any]? = nil,
using queue: DispatchQueue = .main)
// with acknowledging
public func publish(_ topic: String,
options: [String: Any] = [:],
args: [Any]? = nil,
kwargs: [String: Any]? = nil,
using queue: DispatchQueue = .main,
onSuccess: @escaping PublishCallback,
onError: @escaping 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?)
})
调用可能触发两个回调
public func call(_ proc: String,
options: [String: Any] = [:],
args: [Any]? = nil,
kwargs: [String: Any]? = nil,
using queue: DispatchQueue = .main,
onSuccess: @escaping CallCallback,
onError: @escaping 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)
})
调用可能触发三个回调
public func register(_ proc: String,
options: [String: Any] = [:],
using queue: DispatchQueue = .main,
onSuccess: @escaping RegisterCallback,
onError: @escaping ErrorRegisterCallback,
onFire: @escaping SwampProc)
session.register("wamp.procedure",
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)
},
onFire: { details, args, kwargs in
// Make your great code to execute when someone called your procedure here
},
)
目前,只有针对crossbar的集成测试。我计划将来添加单元测试。
为了运行测试
cd SwiftWamp_clone_location/
pod install
cd SwiftWampTests/CrossbarInstanceTest
crossbar start
如果测试因某种原因失败,请确保
MIT因为它是默认的: tldrlegal。