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); }
public void CleanupPeerData(IPeerSender peer) { _shamanSender.CleanupPeerData(peer); }
public int Send(MessageBase message, IPeerSender peer) { return(_shamanSender.Send(message, new DeliveryOptions(message.IsReliable, message.IsOrdered), peer)); }