/// <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); }
/// <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); } }