public void SendMessage(XLua.LuaTable message) { if (!this.IsConnect) { UnityEngine.Debug.LogError("SendMessage this.IsConnect == False"); return; } lock (m_sendMessages) { var luaMessage = new FastNet.LocalMessage(message); m_sendMessages.Enqueue(luaMessage); } }
public void SendRoomMessage(UInt32 roomId, String roleId, XLua.LuaTable message) { if (!this.IsConnect) { UnityEngine.Debug.LogError("SendRoomMessage this.IsConnect == False"); return; } var luaMessage = new FastNet.LocalMessage(message); var roomMessageReq = new pkt.protocols.RoomMessageReq(); roomMessageReq.clsId = luaMessage.luaTable.Get <String, UInt32>("ClsId"); roomMessageReq.roomId = roomId; roomMessageReq.roleId = roleId; roomMessageReq.signId = luaMessage.luaTable.Get <String, UInt32>("SignId"); try { var memoryStream = new System.IO.MemoryStream(); var binaryWriter = new System.IO.BinaryWriter(memoryStream, Encoding.ASCII); luaMessage.Serialize(binaryWriter); binaryWriter.Flush(); roomMessageReq.data = Encoding.ASCII.GetString(memoryStream.ToArray()); binaryWriter.Close(); memoryStream.Close(); lock (m_sendMessages) { m_sendMessages.Enqueue(roomMessageReq); } } catch (Exception e) { UnityEngine.Debug.LogException(e); } }
private void DoRecvMessage() { try { if (m_client.Available >= MessageHeadSize) { var buffer = new byte[MessageHeadSize]; var stream = m_client.GetStream(); if (stream.Read(buffer, 0, MessageHeadSize) == MessageHeadSize) { Marshal.Copy(buffer, 0, m_recvHeadBuffer, MessageHeadSize); m_recvHead = (MessageHead)Marshal.PtrToStructure(m_recvHeadBuffer, typeof(MessageHead)); KeyValuePair <UInt32, ConstructorInfo> ret; MessageLua ret_lua = null; if (m_messages.TryGetValue(m_recvHead.id, out ret) == false && m_luaMessages.TryGetValue(m_recvHead.id, out ret_lua) == false) { DispatchSocketEvent(Event.kErrorMessage, "no find message id:" + m_recvHead.id); return; } Message message = null; if (ret_lua != null) { if (ret_lua.SignId != m_recvHead.signatureId) { DispatchSocketEvent(Event.kErrorMessage, "signId check error,message id:" + m_recvHead.id); return; } message = new FastNet.LocalMessage(ret_lua.Create()); } else if (ret.Value != null) { if (ret.Key != m_recvHead.signatureId) { DispatchSocketEvent(Event.kErrorMessage, "signId check error,message id:" + m_recvHead.id); return; } message = ret.Value.Invoke(new object[] { }) as Message; } if (m_recvHead.size > 0) { buffer = new byte[m_recvHead.size]; if (stream.Read(buffer, 0, (int)m_recvHead.size) != m_recvHead.size) { DoClose("recv size error,message id:" + m_recvHead.id, true); return; } var memoryStream = new MemoryStream(buffer); var binaryReader = new BinaryReader(memoryStream); message.Deserialize(binaryReader); binaryReader.Close(); memoryStream.Close(); } if (message != null && message.ClsId != pkt.protocols.SocketHeartbeat.sClsId) { if (message.ClsId == pkt.protocols.RoomMessageRes.sClsId) { var roomMessageRes = (pkt.protocols.RoomMessageRes)message; KeyValuePair <UInt32, ConstructorInfo> ret_roomMessage; MessageLua ret_luaRoomMessage = null; if (false == m_messages.TryGetValue(roomMessageRes.clsId, out ret_roomMessage) && m_luaMessages.TryGetValue(roomMessageRes.clsId, out ret_luaRoomMessage) == false) { DispatchSocketEvent(Event.kErrorMessage, "no find room message id:" + roomMessageRes.clsId); } else { Message roomMessage = null; if (ret_lua != null) { if (ret_lua.SignId != m_recvHead.signatureId) { DispatchSocketEvent(Event.kErrorMessage, "signId check error,room message id:" + roomMessageRes.clsId); return; } roomMessage = new FastNet.LocalMessage(ret_luaRoomMessage.Create()); } else if (ret.Value != null) { if (ret.Key != m_recvHead.signatureId) { DispatchSocketEvent(Event.kErrorMessage, "signId check error,room message id:" + roomMessageRes.clsId); return; } roomMessage = ret_roomMessage.Value.Invoke(new object[] { }) as Message; } if (roomMessageRes.data.Length > 0) { byte[] byteArray = System.Text.Encoding.Default.GetBytes(roomMessageRes.data); var memoryStream = new MemoryStream(byteArray); var binaryReader = new BinaryReader(memoryStream); message.Deserialize(binaryReader); binaryReader.Close(); memoryStream.Close(); } lock (m_recvMessages) { var mi = new MessageInfo(); mi.message = roomMessage; mi.roleId = roomMessageRes.roleId; mi.roomId = roomMessageRes.roomId; m_recvMessages.Enqueue(mi); } } } else if (message.ClsId == pkt.protocols.SocketConnect.sClsId) { var socketConnect = (pkt.protocols.SocketConnect)message; m_serverId = socketConnect.serverId; m_sessionId = socketConnect.sessionId; lock (m_md5Values) { m_md5Values = socketConnect.md5Values; } DispatchSocketEvent(Event.kCheckUpdate, ""); } else { lock (m_recvMessages) { var mi = new MessageInfo(); mi.message = message; m_recvMessages.Enqueue(mi); } } } m_timerHeartbeat = 10000; } } } catch (Exception e) { DoClose(e.ToString(), true); } }