public void OnReceive() { if (messageQueue.Count > 0) { MarsMessage message = messageQueue.Dequeue(); if (message == null) { Debug.LogFormat("消息={)},消息队列情况长度={1}", message, messageQueue.Count); return; } switch (message.cmd) { case MessageConst.Battle.RESP_MOVE_CHESS: Debug.Log("移动棋子"); RespMoveChess respMoveChess = ProtobufTool.DeSerialize <RespMoveChess>(message.data); ReceiveChessMove(respMoveChess); break; case MessageConst.Battle.RESP_CURRENT_GO_INFO: Debug.Log("当前行动信息"); RespCurrentGoInfo respCurrentGoInfo = ProtobufTool.DeSerialize <RespCurrentGoInfo>(message.data); ReceiveGoInfo(respCurrentGoInfo); break; default: break; } } }
public void Handle(int cmd, byte[] data) { MarsMessage message = new MarsMessage { cmd = cmd, data = data }; messageQueue.Enqueue(message); }
static public void CancelMatch() { MarsMessage marsMessage = new MarsMessage() { messageType = MessageConst.Room.TYPE, cmd = MessageConst.Room.REQ_CANEL_MATCH }; clientSocket.Send(marsMessage); }
static public void SendGameInitDone() { MarsMessage marsMessage = new MarsMessage() { messageType = MessageConst.Battle.TYPE, cmd = MessageConst.Battle.REQ_GAME_INIT_DONE }; clientSocket.Send(marsMessage); }
static public void SendMoveChess(MoveChess moveChess) { MarsMessage marsMessage = new MarsMessage() { messageType = MessageConst.Battle.TYPE, cmd = MessageConst.Battle.REQ_MOVE_CHESS, data = ProtobufTool.Serialize(moveChess) }; clientSocket.Send(marsMessage); }
/// <summary> /// 发送心跳消息 /// </summary> /// <param name="source"></param> /// <param name="e"></param> private void Ping(object source, System.Timers.ElapsedEventArgs e) { lastPingTime = Tool.ToGMTTime(DateTime.Now); MarsMessage ping = new MarsMessage() { messageType = 1, cmd = 1 }; Send(ping); }
public static void Receive(MarsMessage marsMsg) { int messageType = marsMsg.messageType; int cmd = marsMsg.cmd; Debug.LogFormat("收到服务器消息,messageType={0},cmd={1}", messageType, cmd); IResponseHandler handler = responseDic[messageType]; if (handler != null) { handler.Handle(cmd, marsMsg.data); } }
static public void QuickMatch(int roomType) { ReqCreateRoom createRoom = new ReqCreateRoom { roomType = roomType }; MarsMessage marsMessage = new MarsMessage() { messageType = MessageConst.Room.TYPE, cmd = MessageConst.Room.REQ_QUICK_MATCH, data = ProtobufTool.Serialize(createRoom) }; clientSocket.Send(marsMessage); }
static public void LoginGameServer() { CreateScoket(); VertifyUserInfo vertifyUserInfo = new VertifyUserInfo() { token = PlayerManager.self.loginDataCenter.data.token, userId = (long)PlayerManager.self.loginDataCenter.data.accountId, zoneId = 1 }; MarsMessage marsMessage = new MarsMessage() { messageType = MessageConst.Login.TYPE, cmd = MessageConst.Login.REQ_VERTIFY, data = ProtobufTool.Serialize(vertifyUserInfo) }; clientSocket.Send(marsMessage); }
private void ReceiveHead(IAsyncResult ar) { int count = (int)ar.AsyncState; count += socket.EndReceive(ar); //如果头数据长度不够,继续读 if (count < headlen) { socket.BeginReceive(head, count, headlen - count, SocketFlags.None, new AsyncCallback(ReceiveHead), count); } else { //处理一下高低字节位问题 byte[] realBytesLen = new byte[headlen]; for (int i = 0; i < headlen; i++) { realBytesLen[i] = head[headlen - 1 - i]; } int length = ByteUtil.byteArray2Int(realBytesLen, 0); byte[] data = new byte[length];//声明接受数组 count = 0; while (count < length) { int tempLength = socket.Receive(data, count, length - count, SocketFlags.None); count += tempLength; } socket.BeginReceive(head, 0, headlen, SocketFlags.None, new AsyncCallback(ReceiveHead), 0); MarsMessage msg = ProtobufTool.DeSerialize <MarsMessage>(data); //心跳消息直接在本类处理 if (msg.messageType == 1) { Pong pong = ProtobufTool.DeSerialize <Pong>(msg.data); Pong(pong); } else { MessageDispatcher.Receive(msg); } } }
static public void SendCreateRole(string roleName) { VertifyUserInfo _vertifyUserInfo = new VertifyUserInfo() { token = PlayerManager.self.loginDataCenter.data.token, userId = (long)PlayerManager.self.loginDataCenter.data.accountId, zoneId = 1 }; ReqCreateRole reqCreateRole = new ReqCreateRole() { vertifyUserInfo = _vertifyUserInfo, name = roleName }; MarsMessage marsMessage = new MarsMessage() { messageType = MessageConst.Login.TYPE, cmd = MessageConst.Login.REQ_CREATE_ROLE, data = ProtobufTool.Serialize(reqCreateRole) }; clientSocket.Send(marsMessage); }
private void WriteSendDate(MarsMessage marsMessage) { byte[] msBts = ProtobufTool.Serialize(marsMessage); byte[] data = new byte[msBts.Length + 4]; byte[] lenghtBytes = ByteUtil.int2ByteArray(msBts.Length); for (int i = 0; i < 4; i++) { data[i] = lenghtBytes[3 - i]; } for (int i = 0; i < msBts.Length; i++) { data[i + 4] = msBts[i]; } //!ping if (marsMessage.messageType != 1) { Debug.LogFormat("发送数据,messageType={0},cmd={1},messageLen={2}", marsMessage.messageType, marsMessage.cmd, data.Length); } socket.BeginSend(data, 0, data.Length, SocketFlags.None, callback => { socket.EndSend(callback); //Debug.Log("消息发送成功"); }, socket); }
/// <summary> /// 发送消息 /// </summary> /// <param name="sendMeg"></param> public void Send(MarsMessage marsMessage) { WriteSendDate(marsMessage); }