/// <summary>
        /// 发送SOCKET消息
        /// </summary>
        public void SendMsg(int uMsgID, ByteBuffer buffer)
        {
            NFMsg.MsgBase xData = new NFMsg.MsgBase();
            xData.player_id = Util.NFToPB(mMainID);
            ByteBuffer newbuffer = new ByteBuffer(buffer.ToBytes());

            xData.msg_data = newbuffer.ReadBytes();
            MemoryStream body = new MemoryStream();

            Serializer.Serialize <NFMsg.MsgBase>(body, xData);
            MsgHead head = new MsgHead();

            head.unMsgID   = (UInt16)uMsgID;
            head.unDataLen = (UInt32)body.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;
            byte[] bodyByte  = body.ToArray();
            byte[] headByte  = StructureTransform.StructureToByteArrayEndian(head);
            byte[] sendBytes = new byte[head.unDataLen];
            headByte.CopyTo(sendBytes, 0);
            bodyByte.CopyTo(sendBytes, headByte.Length);
            SocketClient.SendMessage(sendBytes);
            buffer.Close();
            newbuffer.Close();
        }
Exemple #2
0
        public static byte[] StructureToByteArrayEndian(object obj)
        {
            object thisBoxed = obj;
            Type   test      = thisBoxed.GetType();
            int    offset    = 0;

            byte[]   data = new byte[Marshal.SizeOf(thisBoxed)];
            object   fieldValue;
            TypeCode typeCode;

            byte[] temp;

            foreach (var field in test.GetFields())
            {
                fieldValue = field.GetValue(thisBoxed);              // Get value
                typeCode   = Type.GetTypeCode(fieldValue.GetType()); // get type

                switch (typeCode)
                {
                case TypeCode.Single:     // float
                {
                    temp = BitConverter.GetBytes((Single)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(Single));
                    break;
                }

                case TypeCode.Int32:
                {
                    temp = BitConverter.GetBytes((Int32)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(Int32));
                    break;
                }

                case TypeCode.UInt32:
                {
                    temp = BitConverter.GetBytes((UInt32)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(UInt32));
                    break;
                }

                case TypeCode.Int16:
                {
                    temp = BitConverter.GetBytes((Int16)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(Int16));
                    break;
                }

                case TypeCode.UInt16:
                {
                    temp = BitConverter.GetBytes((UInt16)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(UInt16));
                    break;
                }

                case TypeCode.Int64:
                {
                    temp = BitConverter.GetBytes((Int64)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(Int64));
                    break;
                }

                case TypeCode.UInt64:
                {
                    temp = BitConverter.GetBytes((UInt64)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(UInt64));
                    break;
                }

                case TypeCode.Double:
                {
                    temp = BitConverter.GetBytes((Double)fieldValue);
                    StructureTransform.Reverse(temp);
                    Array.Copy(temp, 0, data, offset, sizeof(Double));
                    break;
                }

                case TypeCode.Byte:
                {
                    data[offset] = (Byte)fieldValue;
                    break;
                }

                default:
                {
                    //System.Diagnostics.Debug.Fail("No conversion provided for this type : " + typeCode.ToString());
                    break;
                }
                }
                ;  // switch

                if (typeCode == TypeCode.Object)
                {
                    int length = ((byte[])fieldValue).Length;
                    Array.Copy(((byte[])fieldValue), 0, data, offset, length);
                    offset += length;
                }
                else
                {
                    offset += Marshal.SizeOf(fieldValue);
                }
            } // foreach

            return(data);
        } // Swap