public void Add(PacketMessage msg) { PacketList.Add(msg); ++Size; }
private void OnPacketMessage(NetBuffer msg) { var packetMsg = new PacketMessage(); packetMsg.Read(msg); long id = packetMsg.MessagePacketId; if(SendPacketMessageRecvDictionary.ContainsKey(id)) { PacketNetBuffer packet = null; lock (SendPacketMessageRecvDictionaryLocker) { if(SendPacketMessageRecvDictionary.ContainsKey(id)) { packet = SendPacketMessageRecvDictionary[id]; } } if(packet != null) { packet.Add(packetMsg); if (packet.IsComplete) { var ms = packet.ToBuffer(); lock(SendPacketMessageRecvDictionaryLocker) { SendPacketMessageRecvDictionary.Remove(id); } lock(AlreadyMessageQueueLocker) { OnDataMessage(this, ms, packet.SendConnection); } } } } }
private void OnSendPacketMessageRecv(NetBuffer msg) { var recvMsg = new SendPacketMessageRecv(); recvMsg.Read(msg); var UniqueIdentifier = recvMsg.UniqueIdentifier; var MessageRacketId = recvMsg.MessagePacketId; if (PacketMessageDictionary.ContainsKey(UniqueIdentifier)) { NetOutgoingMessage packetMsg = null; lock (PacketMessageDictionaryLocker) { if (PacketMessageDictionary.ContainsKey(UniqueIdentifier)) { packetMsg = PacketMessageDictionary[UniqueIdentifier]; PacketMessageDictionary.Remove(UniqueIdentifier); } } if (packetMsg != null) { int n = (packetMsg.LengthBytes + MaxPacketSize - 1) / MaxPacketSize; for (int i = 0; i < n; ++i) { int l = packetMsg.LengthBytes - i * MaxPacketSize; int length = l < MaxPacketSize ? l : MaxPacketSize; if (length > 0) { NetOutgoingMessage om = client.CreateMessage(); var pm = new PacketMessage() { Number = i, MessagePacketId = MessageRacketId, Bytes = new byte[length], }; Array.Copy(packetMsg.Data, i * MaxPacketSize, pm.Bytes, 0, length); om.Write(pm.Id); pm.Write(om); client.SendMessage(om, NetDeliveryMethod.Unreliable); } } } } }