Ejemplo n.º 1
0
 public TSocketMessage(StoreHeap heap)
 {
     using (MMO_MemoryStream ms = new MMO_MemoryStream())
     {
         foreach (Node node in heap)
         {
             ms.WriteShort((short)node.Index);
             ms.WriteShort((short)node.X);
             ms.WriteShort((short)node.Y);
             ms.WriteShort((short)node.Direction);
         }
         MsgBuffer = ms.ToArray();
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 封包
        /// </summary>
        /// <param name="data">待处理的数据</param>
        /// <returns></returns>
        public byte[] PackData(TSocketMessage msg, MessageType msgType)
        {
            // 封包后返回的数据
            byte[] retBuffer = null;
            // 待封包的数据
            byte[] msgBuffer = msg.MsgBuffer;
            // 数据类型
            byte messageType = (byte)msgType;

            using (MMO_MemoryStream ms = new MMO_MemoryStream())
            {
                //封装包头
                ms.WriteShort(head1);
                ms.WriteShort(head2);
                //包协议
                if (msgBuffer != null)
                {
                    // 写入数据类型
                    ms.WriteByte(messageType);
                    // 写入包体长度信息
                    ms.WriteInt((int)(msgBuffer.Length + 2));
                    // 获取经异或加密后的数据
                    msgBuffer = SecurityUtil.Xor(msgBuffer);
                    // 获取 Crc 冗余校验码
                    ushort crc = Crc16.CalculateCrc16(msgBuffer);
                    // 写入 Crc 冗余校验码
                    ms.WriteUShort(crc);
                    // 写入 Xor 加密后的数据
                    ms.Write(msgBuffer, 0, msgBuffer.Length);
                }
                else
                {
                    ms.WriteInt(0);
                }
                // 获取处理后的完整数据包
                retBuffer = ms.ToArray();
            }
            return(retBuffer);
        }