示例#1
0
    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;
            }
        }
    }
示例#2
0
    public void Handle(int cmd, byte[] data)
    {
        MarsMessage message = new MarsMessage {
            cmd  = cmd,
            data = data
        };

        messageQueue.Enqueue(message);
    }
示例#3
0
    static public void CancelMatch()
    {
        MarsMessage marsMessage = new MarsMessage()
        {
            messageType = MessageConst.Room.TYPE,
            cmd         = MessageConst.Room.REQ_CANEL_MATCH
        };

        clientSocket.Send(marsMessage);
    }
示例#4
0
    static public void SendGameInitDone()
    {
        MarsMessage marsMessage = new MarsMessage()
        {
            messageType = MessageConst.Battle.TYPE,
            cmd         = MessageConst.Battle.REQ_GAME_INIT_DONE
        };

        clientSocket.Send(marsMessage);
    }
示例#5
0
    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);
    }
示例#6
0
        /// <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);
        }
示例#7
0
    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);
        }
    }
示例#8
0
    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);
    }
示例#9
0
    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);
    }
示例#10
0
        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);
                }
            }
        }
示例#11
0
    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);
    }
示例#12
0
 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);
 }
示例#13
0
 /// <summary>
 /// 发送消息
 /// </summary>
 /// <param name="sendMeg"></param>
 public void Send(MarsMessage marsMessage)
 {
     WriteSendDate(marsMessage);
 }