// 接受消息 public void readMessage(byte[] bytes) { //消息读取完成后开始解析 MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length); VitByteArray arr = new VitByteArray(ms); while (arr.Postion < bytes.Length) { int messageLength = Utils.BigtoLittle32 (arr.ReadInt()); if ((arr.Postion + messageLength - 4 + MsgHeadSize) > bytes.Length) { int lastCount = arr.Length - arr.Postion + 4; allCount -= lastCount; Middle = new Byte[lastCount]; Buffer.BlockCopy(bytes, arr.Postion - 4, Middle, 0, lastCount); break; } int messageID = Utils.BigtoLittle32( arr.ReadInt()); //转换为Socket消息模型 VitSocketModel model = new VitSocketModel(); model.bodyLength = messageLength-4; model.messageID = messageID; byte[] data = new byte[messageLength-4]; arr.ReadBytes(data, 0, (uint)messageLength); model.message = data; messages.Add(model); } }
// 解析消息 void parseMessage(byte[] bytes) { //消息读取完成后开始解析 MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length); VitByteArray arr = new VitByteArray(ms); while (arr.Postion < bytes.Length) { int messageLength = arr.ReadInt(); messageLength = Utils.BigtoLittle32(messageLength); if ((arr.Postion + messageLength - 4 + MsgHeadSize) > bytes.Length) { Debug.LogError("解析消息长度不一致[ " + messageLength + " ][ " + bytes.Length + " ]"); break; } int messageID = arr.ReadInt(); messageID = Utils.BigtoLittle32(messageID); //转换为Socket消息模型 VitSocketModel model = new VitSocketModel(); model.bodyLength = messageLength; model.messageID = messageID; byte[] pdata = new byte[messageLength]; arr.ReadBytes(pdata, 0, (uint)messageLength); model.message = pdata; // 解析proto对象 VitProtobufDispatcher.Instance.OnMessage(model); } }
// 发送消息 public void sendMessage(object msg,int messageID) { byte[] data; using (MemoryStream ms = new MemoryStream()) { ProtoModelSerializer serializer = new ProtoModelSerializer(); serializer.Serialize(ms, msg); data = new byte[ms.Length]; ms.Position = 0; ms.Read(data, 0, data.Length); } VitByteArray arr = new VitByteArray(); arr.WriteInt(data.Length +4); arr.WriteInt(messageID); if (data != null) { arr.WriteBytes(data); } try { socket.Send(arr.Buffer); } catch (SocketException e) { Debug.Log(" " + e.ErrorCode + " " + e.Message); } }
// POST请求 - protobuf IEnumerator POST(string url, object msg, int messageID) { Log.DebugInfo ("发送请求................... messageID == " + messageID); byte[] data; using (MemoryStream ms = new MemoryStream()) { ProtoModelSerializer serializer = new ProtoModelSerializer(); serializer.Serialize(ms, msg); Log.DebugInfo ("serializer..."); data = new byte[ms.Length]; ms.Position = 0; ms.Read(data, 0, data.Length); } System.Text.UTF8Encoding converter = new System.Text.UTF8Encoding(); // string token = "555566"; byte[] tokeyarray = converter.GetBytes(Utils.m_instance.m_useerTokey); VitByteArray arr = new VitByteArray(); arr.WriteInt(messageID); arr.WriteShort (tokeyarray.Length);//token arr.WriteBytes (tokeyarray); // arr.WriteInt(data.Length); if (data != null) { arr.WriteBytes(data); } // Debug.Log ("send...." + url + " " + arr.Length + " " + data.Length + " tokeyarray " + tokeyarray.Length); WWW www = new WWW(url, arr.Buffer); yield return www; if (www.error != null) { //POST请求失败 Log.DebugInfo("error is :" + www.error); } else { parseMessage(www.bytes); } }