Esempio n. 1
0
        /// <summary>
        /// 发包
        /// </summary>
        /// <param name="packet"></param>
        public override void Send <TPacket>(TPacket packet)
        {
            var bytes         = NetTool.GetBytesFromPacket(packet);
            var data          = new byte[bytes.Length + sizeof(int) * 2];
            var lengthBytes   = BitConverter.GetBytes(bytes.Length);
            var packetIdBytes = BitConverter.GetBytes((int)packet.PacketId);

            lengthBytes.CopyTo(data, 0);
            packetIdBytes.CopyTo(data, sizeof(int));
            bytes.CopyTo(data, sizeof(int) * 2);
            WWW w = new WWW(Url, data);

            PendingReqList.Add(w);
        }
Esempio n. 2
0
        /// <summary>
        /// 处理包数据
        /// </summary>
        /// <param name="data"></param>
        protected virtual void ProcessData(byte[] data)
        {
            var lengthBytes   = new byte[sizeof(int)];
            var packetIdBytes = new byte[sizeof(int)];
            int offset        = lengthBytes.Length + packetIdBytes.Length;

            if (data.Length < offset)
            {
                Debug.LogError("Process packet data length is too little.");
                return;
            }
            var bytes = new byte[data.Length - offset];

            for (int i = 0; i < lengthBytes.Length; ++i)
            {
                lengthBytes[i] = data[i];
            }

            for (int i = 0; i < packetIdBytes.Length; ++i)
            {
                packetIdBytes[i] = data[i + lengthBytes.Length];
            }
            try
            {
                EnumPacketId packetId = (EnumPacketId)BitConverter.ToInt32(packetIdBytes, 0);
                for (int i = 0; i < bytes.Length; ++i)
                {
                    bytes[i] = data[i + offset];
                }

                var packet = NetTool.GetPacketFromBytes(PacketBindings.GetTypeByPacketId(packetId), bytes);
                GetProcessPacket()(packet);
            }
            catch (Exception ex)
            {
                Debug.LogErrorFormat("Can't get packet data or process packet: {0}", ex);
            }
        }