public void AddPacket(IPeerSender peer, DeliveryOptions deliveryOptions, Payload payload1, Payload payload2)
 {
     lock (_sync)
     {
         var packetsQueue = GetPeerQueue(peer);
         packetsQueue.Enqueue(deliveryOptions, payload1, payload2);
     }
 }
 private IPacketQueue GetPeerQueue(IPeerSender peer)
 {
     if (!_peerToPackets.TryGetValue(peer, out var packetsQueue))
     {
         packetsQueue = new PacketQueue(_config.MaxPacketSize, _logger);
         _peerToPackets.TryAdd(peer, packetsQueue);
     }
     return(packetsQueue);
 }
 public void CleanupPeerData(IPeerSender peer)
 {
     if (_peerToPackets.TryRemove(peer, out var packetQueue))
     {
         lock (_sync)
         {
             foreach (var packet in packetQueue)
             {
                 packet.Dispose();
             }
             packetQueue.Clear();
         }
     }
 }
        public int Send(ISerializable message, DeliveryOptions deliveryOptions, IPeerSender peer)
        {
            var stream = _shamanStreamPool.Rent(message.GetType());

            try
            {
                _serializer.Serialize(message, stream);
                _packetSender.AddPacket(peer, deliveryOptions, new Payload(stream.GetBuffer()));
                return((int)stream.Length);
            }
            finally
            {
                _shamanStreamPool.Return(stream, message.GetType());
            }
        }
 public void CleanupPeerData(IPeerSender peer)
 {
     _packetSender.CleanupPeerData(peer);
 }
Beispiel #6
0
 public void CleanupPeerData(IPeerSender peer)
 {
     _shamanSender.CleanupPeerData(peer);
 }
Beispiel #7
0
 public int Send(MessageBase message, IPeerSender peer)
 {
     return(_shamanSender.Send(message, new DeliveryOptions(message.IsReliable, message.IsOrdered), peer));
 }