示例#1
0
        public void AsynSendMessage(gNetMsgType msgType, ProtoBuf.IExtensible data)
        {
            gNetMsg msg = new gNetMsg()
            {
                type    = msgType,
                content = gPB.pbEncode(data),
            };

            msg.size = msg.content.Length;

            lock (sendQueue) {
                sendQueue.Enqueue(msg);
            }
        }
示例#2
0
文件: gNetMsg.cs 项目: Leigh-Ma/gGame
        public static byte[] EncodeHead(gNetMsg msg)
        {
            int type = IPAddress.HostToNetworkOrder((int)msg.type);
            int size = IPAddress.HostToNetworkOrder(msg.size);

            byte[] typeBytes = BitConverter.GetBytes(type);
            byte[] sizeBytes = BitConverter.GetBytes(size);

            byte[] headBytes = new byte[HEAD_BYTES];
            Array.Copy(typeBytes, 0, headBytes, OFFSET_TYPE, TYPE_BYTES);
            Array.Copy(sizeBytes, 0, headBytes, OFFSET_SIZE, SIZE_BYTES);

            return(headBytes);
        }
示例#3
0
        void sendMessageNoPlayerId(gNetMsg msg)
        {
            int totalSize = msg.size + gNetMsgHead.HEAD_BYTES;
            int sendSize  = 0;

            byte[] data = new byte[totalSize];

            Array.Copy(gNetMsgHead.EncodeHead(msg), 0, data, 0, gNetMsgHead.HEAD_BYTES);

            Array.Copy(msg.content, 0, data, gNetMsgHead.HEAD_BYTES, msg.size);

            while (sendSize < totalSize)
            {
                sendSize += clientSocket.Send(data, sendSize, totalSize - sendSize, SocketFlags.None);
            }
        }
示例#4
0
文件: gNetMsg.cs 项目: Leigh-Ma/gGame
        public static bool DecodeHead(byte[] headBytes, ref gNetMsg msg)
        {
            int type, size;

            if (headBytes.Length >= HEAD_BYTES)
            {
                type = BitConverter.ToInt32(headBytes, OFFSET_TYPE);
                size = BitConverter.ToInt32(headBytes, OFFSET_SIZE);

                msg.type = (gNetMsgType)IPAddress.NetworkToHostOrder(type);
                msg.size = IPAddress.NetworkToHostOrder(size);

                return(true);
            }

            return(false);
        }
示例#5
0
        //NOT USED ACCORDING TO PROTOCOL
        void sendMessage(gNetMsg msg)
        {
            int totalSize = msg.size + gNetMsgHead.HEAD_BYTES + PAYER_ID_BYTES;
            int sendSize  = 0;

            Int64 playerId = IPAddress.HostToNetworkOrder(gGlobal.MyPlayerId);

            byte[] data = new byte[totalSize];

            Array.Copy(BitConverter.GetBytes(playerId), 0, data, 0, PAYER_ID_BYTES);

            Array.Copy(gNetMsgHead.EncodeHead(msg), 0, data, PAYER_ID_BYTES, gNetMsgHead.HEAD_BYTES);

            Array.Copy(msg.content, 0, data, PAYER_ID_BYTES + gNetMsgHead.HEAD_BYTES, msg.size);

            while (sendSize < totalSize)
            {
                sendSize += clientSocket.Send(data, sendSize, totalSize - sendSize, SocketFlags.None);
            }
        }
示例#6
0
        public bool GetOneNetMsg(out gNetMsg msg)
        {
            msg = new gNetMsg();

            if (!gNetMsgHead.DecodeHead(this.buffer, ref msg))
            {
                return(false);
            }


            int remain = this.bufferOffset - gNetMsgHead.HEAD_BYTES - msg.size;

            if (remain < 0)
            {
                return(false);
            }

            if (msg.size > 0)
            {
                msg.content = new byte[msg.size];
                Array.Copy(this.buffer, gNetMsgHead.HEAD_BYTES, msg.content, 0, msg.size);
            }

            if (remain == 0)
            {
                this.bufferOffset = 0;
                this.buffer.Initialize();
            }
            else
            {
                byte[] residual = new byte[remain];
                Array.Copy(this.buffer, this.bufferOffset - remain, residual, 0, remain);

                this.buffer.Initialize();
                Array.Copy(this.buffer, 0, residual, 0, remain);
                this.bufferOffset = remain;
            }

            return(true);
        }