BittyBird 0.1.4

BittyBird 0.1.4

Nick Eneboe 维护。



 
依赖
SwiftMsgPack~> 1.0
Starscream~> 3.0.2
 

BittyBird 0.1.4

  • Nick Eneboe

BittyBird

CI Status Version License Platform

BittyBird 是一个用于与 Phoenix Channels 交互的 Swift 客户端库。它默认使用 JSON 进行序列化,但也包括一个用于编码和解码消息的二进制到二进制的 MessagePack 序列化器。查看这篇博客文章,了解如何设置您的 Phoenix 应用以使用 MessagePack 进行序列化:如何设置您的 Phoenix 应用以使用 MessagePack 进行序列化

安装

BittyBird 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod 'BittyBird', '~> 0.1.4'

需求

BittyBird是用 Swift 4.1.2 编写的,用于连接到版本 >=1.3 的 Phoenix 应用,目标设备为 iOS 8.0 及以上。它的依赖项包括 SwiftMsgPack,它会用它进行 MessagePack 序列化,以及 Starscream,一个 Swift WebSocket 库。

使用方法

创建套接字的示例
// Production
let socket = Socket(endPoint: "wss://yoursite.com/socket/websocket")

// Development
let socket = Socket(endPoint: "ws://:4000/socket/websocket")

// Use MessagePack for serialization
let socketOptions = SocketOptions(serializer: MsgPackSerializer())
let socket = Socket(endPoint: "wss://yoursite.com/socket/websocket", opts: socketOptions)

// More Options - All SocketOptions parameters are optional
let socketOptions = SocketOptions(
  timeout: 15, heartbeatIntervalSeconds: 60,
  reconnectAfterSeconds: { (tries: Int) -> Int in return 100 },
  logger: { (kind: String, msg: String, data: Any?) in
    print("kind: \(kind), msg: \(msg), data: \(data)")   
  },
  params: ["customParamKey": "customParamValue"],
  serializer: CustomSerializer() // Any class that conforms to Serializer protocol will work
)
let socket = Socket(endPoint: "wss://yoursite.com/socket/websocket", opts: socketOptions)
创建和加入频道的示例
// Creating a channel without parameters
let channel = socket.channel(topic: "room:lobby")

// Creating a channel with parameters, passed to Phoenix channel's join function
let channel = socket.channel(topic: "room:lobby", chanParams: ["customParam": "customValue"])

// Joining a channel
channel.join()
  .receive(status: "ok") { (msg) in /* handle successful join */ }
  .receive(status: "error") { (errorMsg) in /* handle error */ }
  .receive(status: "timeout") { (_) in /* handle timeout */ }
推送和处理事件示例
// Handling events
channel.on(event: "someEvent") { (msg) in
  /* Handle "someEvent" message, probably doing something with msg.payload */ 
}

// Pushing messages
channel.push(event: "somePushEvent", payload: ["aKey": "aValue", "anotherKey": "anotherValue"])

// Pushing messages and optionally receiving replys
channel.push(event: "somePushEvent", payload: ["aKey": "aValue"])
  .receive(status: "ok") { (msg) in /* handle push reply */ }
  .receive(status: "error") { (errorMsg) in /* handle push error */ }
  .receive(status: "timeout") { (_) in /* handle push timeout */ }

关于

BittyBird 的主要目标是尽可能接近 Phoenix JS 客户端。我还努力让它尽可能地可定制。这意味着几乎所有的类和函数都是开放的,所以如果你想要的话,你可以用你自己的实现来覆盖它们。但要小心。

与 Phoenix JS 客户端显著不同的 API

  • 所有参数都是命名参数
  • 使用 BBTimer 而不是 Timer
  • 使用 Socket.socketProtocol 而不是 Socket.protocol
  • 使用 Socket.heartbeatIntervalSeconds 而不是 Socket.heartbeatIntervalMs
  • 使用 Socket.reconnectAfterSeconds 而不是 Socket.reconnectAfterMs
  • skipHeartbeatSocket 的属性,而不是 Socket.connection 的属性
  • 没有 Socket.connectionState 方法。Starscream 目前还不支持这个。
  • Phoenix JS 客户端将消息传递为一个具有 topicpayload 等属性的通用数据对象,或者作为单独的参数传递,例如 Channel.isMemeber 方法。BittyBird 通过传递一个 Message 类型的实例来替换这两种模式。
  • Channel.init 接受一个可选的 pushClass 参数,该参数默认为 Push.self。在此用作添加依赖注入以进行测试的方式,但您可以用任何 Push 子类实现通过此参数进行更换。如果 Swift 以后为泛型适应默认值,我可能在未来版本中删除此参数。

作者

BittyBird 是由 Nick Eneboe 编写的。感谢 SwiftPhoenixClient,本仓库从中借鉴了很多东西。同时感谢 phoenix.js 的 API 设计,这是来自 Phoenix 框架的贡献者。

开发

为在您的机器上设置 BittyBird 进行开发

  1. 克隆仓库
  2. 在终端中,cd 到 BittyBird/Example 目录
  3. 运行 pod install
  4. 在 Xcode 中打开 BittyBird/Example/BittyBird.xcworkspace
  5. 按 ⌘+U 运行测试并确保所有测试通过。

许可协议

BittyBird 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。