ProtocolBuffer使用
一、环境及ProtocolBuffer的安装
分别在终端执行以下命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install protobuf-swift
brew install automake
brew install libtool
brew install protobuf
二、客户端通过cocoapods集成:
cocoapods比较完整的安装和使用方法可以参考:https://www.jianshu.com/p/dfe970588f95
1.cd到项目目录。如:
cd /Users/jackxu/Desktop/socketConnectDemo/socketConnectDemo/Client/
2.创建podfile文件:
pod init
3.打开podfile,编辑:
target 'Client' do
use_frameworks!
pod 'ProtocolBuffers-Swift'
end
4.终端执行:
pod install
5.打开Client.xcworkspace工程
三、ProtocolBuffer的使用
1、在项目中, 创建一个(或多个).proto文件
之后会通过该文件, 自动帮我们生成需要的源文件(比如C++生成.cpp源文件, 比如java生成.java源文件, Swift就生成.swift源文件)
2、
syntax = "proto2";
message Person {
required int64 id = 1;
required string name = 2;
optional string email = 3;
}
message UserInfo {
required string name = 1;
required int64 level = 2;
}
3、代码编写完成后, 生成对应语言代码
protoc IMMessage.proto --swift_out="./"
四、使用ProtocolBuffer创建对象并发送
将上一篇(https://blog.youkuaiyun.com/dolacmeng/article/details/81085905)中HYSocket的sendMsg方法修改为:
func sendMsg(message: String) {
let userInfo = UserInfo.Builder()
userInfo.name = "Jack"
userInfo.level = 10
let textMessage = TextMessage.Builder()
textMessage.user = try! userInfo.build()
textMessage.text = message
let msgData = (try! textMessage.build()).data()
//1.获取消息长度
var length = msgData.count
//将消息长度写入data
let headerData = Data(bytes:&length, count: 4)
//发送消息
let totalData = headerData + msgData
self.sendMsg(data: totalData)
}
五、读取消息
1、在HYSocket中添加方法startReadMsg:
func startReadMsg() {
DispatchQueue.global().async {
while true {
guard let lMsg = self.tcpClient.read(4) else{
continue
}
//获取数据长度的data
let lMsgData = Data(bytes: lMsg, count: 4)
var length : Int = 0
(lMsgData as NSData).getBytes(&length, length: 4)
//根据长度读取消息
guard let msg = self.tcpClient.read(length) else{
return
}
let msgData = Data(bytes: msg, count: length)
let message = try! TextMessage.parseFrom(data: msgData)
let user = message.user
print("来自" + (user?.name)! + "的消息:" + message.text)
}
}
}
2、在连接成功后,调用startReadMsg方法
//点击连接
@IBAction func clickConnect(_ sender: UIButton) {
if socket.connectServer() {
print("连接上服务器")
socket.startReadMsg()
socket.sendMsg(message: "您好啊,服务器");
}
}
六、测试
发送消息,收到的是TextMessage: