SocketIOKit 2.0.1

SocketIOKit 2.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2015年6月
SPM支持 SPM

维护者 Ricardo Pereira.



 
依赖项
Runes= 2.0.0
SwiftWebSocket= 0.1.18
 

SocketIO-Kit Logo SocketIO-Kit

SocketIO-Kit 是一个具备类型安全、简洁语法和注重速度的iOS客户端,它只实现了一种传输方式,即 WebSocket,并且使用 SwiftWebSocket

安装

手动

下载 项目,并将 SocketIO-Kit 文件夹复制到您的项目中并使用 Source 文件。由于 SocketIO-Kit 使用了中缀运算符进行单子函数,因此您需要一个 Runes v2.0.0(Swift 1.2)框架来运行 SocketIO-Kit,并且还需要 SwiftWebSocket v0.1.18(Swift 1.2)。

手动安装时无需导入 import SocketIOKit

要求

  • iOS 8.0+ / Mac OS X 10.10+
  • Xcode 6.3 (Swift 1.2)

⚠️Swift 2.0 版本,请使用 Swift2 分支。

使用方法

import SocketIOKit

// Type safety events
enum AppEvents: String, Printable {
    case ChatMessage = "chat message"
    case GetImage = "getimage"
    case Image = "image"

    var description: String {
        return self.rawValue
    }
}

// Mutable
var socket: SocketIO<AppEvents>!
socket = SocketIO(url: "https://:8000/")

// or 
// Immutable
let socket = SocketIO<AppEvents>(url: "https://:8000/")

socket.on(.ConnectError) {
    switch $0 {
    case .Failure(let error):
        println(error)
    default:
        break
    }
}.on(.TransportError) {
    switch $0 {
    case .Failure(let error):
        println("WebSocket error: \(error)")
    default:
        break
    }
}.on(.Connected) { result in
    println("Connected")
    socket.emit(.ChatMessage, withMessage: "I'm iOS")
}.on(.Disconnected) { result in
    switch result {
    case .Message(let reason):
        println("Disconnected: \(reason)")
    default:
        break
    }
}

socket.on(.ChatMessage) {
    switch $0 {
    case .Message(let message):
        println("Remote: \(message)")
    default:
        println("Not supported")
    }
}

socket.connect()

选项

socket = SocketIO(url: "https://:8001/", withOptions: SocketIOOptions().namespace("/gallery"))

示例

获取图像

// NodeJS Server
var io = require('socket.io')(http)

io.on('connection', function(socket) {
  socket.on('getimage', function(msg) {
    // Image
    fs.readFile(__dirname + '/image.png', function(err, buf){
      // It's possible to embed binary data within arbitrarily-complex objects
      socket.emit('image', { image: true, buffer: buf.toString('base64') });
    });
  });
});
// SocketIO-Kit Client
socket.on(.Image) {
    switch $0 {
    case .JSON(let json):
        if let image = json["buffer"] as? String >>- SocketIOUtilities.base64EncodedStringToUIImage {
            println(image)
        }
    default:
        println("Not supported")
    }
}

使用结构体

struct ImageInfo: SocketIOObject {

    let buffer: String

    init(buffer: String) {
        self.buffer = buffer
    }

    init(dict: NSDictionary) {
        self.init(buffer: dict["buffer"] as! String) //Force casts should be avoided!
    }

    var asDictionary: NSDictionary {
        return ["buffer": buffer]
    }

}
// Example using ImageInfo
socket.on(.Image) {
    switch $0 {
    case .JSON(let json):
        let imageInfo = ImageInfo(dict: json) //<---

        if let image = imageInfo.buffer >>- SocketIOUtilities.base64EncodedStringToUIImage {
            println(image)
        }
    default:
        println("Not supported")
    }
}

使用类

class Person: SocketIOObject {

    let name: String

    init(name: String) {
        self.name = name
    }

    convenience required init(dict: NSDictionary) {
        self.init(name: dict["name"] as! String) //Force casts should be avoided!
    }

    var asDictionary: NSDictionary {
        return ["name": name]
    }

}
// Example sending John instance
let john = Person(name: "John")

socket.emit(.Login, withObject: john)

功能

待实现
  • [ ] 自动重新连接
  • [ ] 完整文档
  • [ ] 在 iOS 7.0+ 和 Mac OS X 10.9+ 上进行测试
  • [ ] BDD 测试

调试

您可以通过提供 DEBUG 标志来选择查看消息。只需在 Build Settings > Swift Compiler - Custom Flags: Other Swift Flags 中添加 -D DEBUG 即可。

贡献

请参阅 CONTRIBUTING 文档。感谢 贡献者

作者

Ricardo Pereira,@ricardopereiraw

许可证

这是一个免费软件,可以根据许可证文件中指定的条款重新分发。