0
func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) {
print("+++++++++++++ onSocket +++++++++++++")
var data:NSData = NSData() ///Users/gameover/Works/Apple/SocketLab/SocketLab/SocketUtil.swift:33:13: Variable 'data' was never mutated; consider changing to 'let' constant
let loginIn = UserLoginIn.Builder()
loginIn.setId(Int32(3))
.setUsername("nothing")
.setPassword("123456")
do {
let loginInBuild = try loginIn.build()
print(try loginInBuild.encode())
let length = loginInBuild.serializedSize()
let msg:NSMutableData = NSMutableData(length: Int(length + length.computeInt32SizeNoTag()))!
let stream = CodedOutputStream(data: msg)
try loginInBuild.writeToCodedOutputStream(stream)
try stream.writeRawData(data)
print(NSString(data: data, encoding: NSUTF8StringEncoding))
print("\(data.length) \(loginInBuild.serializedSize())") // this output: 0 19 why?
} catch {
print(error)
}
client.writeData(data, withTimeout: 0, tag: 0)
client.readDataWithTimeout(10, tag: 0)
}
これ以降の場合は、try stream.writeRawData(data); data.lengthはまだ0です。どのようにそれをNSDataに記述し、パッケージヘッダにパッケージ長を追加するか。私はそれが正しいならば、私は知らないprotobuf-swift CodeOutputStreamでNSDataにストリームを書き込めませんか?
try loginInBuild.writeToCodedOutputStream(stream)
の前で
try stream.writeInt32NoTag(loginInBuild.serializedSize())
が追加されますか?
いずれかが役に立ちますか?ありがとう!