public PendingPeerConnection(Guid guid, Peer.Peer peer, int timeoutPeriod, DateTime connectionTimestamp) { Guid = guid; Peer = peer; TimeoutPeriod = timeoutPeriod; ConnectionTimestamp = connectionTimestamp; }
public ServerPacketEventArgs(IDataPacket packet, Peer.Peer peer, IChannel channel, int rawSize) { Packet = packet; Peer = peer; Channel = channel; RawSize = rawSize; }
public SequenceEventArgs(Guid sequenceGuid, DateTime sessionStart, int expectedCompleteSize, int currentSequenceSize, int currentReceivedSize, int sequencePartCount, int currentFragmentIndex, Peer.Peer peer) { SequenceGuid = sequenceGuid; SessionStart = sessionStart; ExpectedCompleteSize = expectedCompleteSize; CurrentSequenceSize = currentSequenceSize; CurrentReceivedSize = currentReceivedSize; SequenceFragmentCount = sequencePartCount; CurrentFragmentIndex = currentFragmentIndex; Peer = peer; }
private void AcceptPeer(Peer.Peer newPeer) { newPeer.OnPeerSynchronized += (sender, e) => OnPeerConnected.Raise(this, new ChannelEventArgs(this, e.Peer)); newPeer.OnPeerDisconnected += (sender, e) => { e.Peer.Dispose(); lock (_lockObj) ConnectedPeers.Remove(e.Peer); }; newPeer.OnRawPacketReceived += RawPacketReceived; newPeer.OnSequenceFragmentReceived += (sender, e) => OnSequenceFragmentReceived.Raise(sender, e); lock (_lockObj) ConnectedPeers.Add(newPeer); }
private void AcceptCallback(IAsyncResult res) { if (!IsActive) { return; } var newSock = ChannelSocket.EndAccept(res); Peer.Peer newPeer; if (IsMainChannel) { newPeer = new Peer.Peer(new SocketIdentity(Manager.GeneratePeerId(), SocketIdentity.GenerateGuid()), newSock, BufferSize, this); newPeer.OnPeerDisconnected += (o, e2) => { OnPeerDisconnected.Raise(o, new ChannelEventArgs(this, newPeer)); }; newPeer.Receive(); AcceptPeer(newPeer); } else { newPeer = new Peer.Peer(new SocketIdentity(Manager.GeneratePeerId()), newSock, BufferSize, this); PendingConnections.Add(new PendingPeerConnection(newPeer.Identity.Guid, newPeer)); newPeer.OnPeerDisconnected += (o, e2) => { OnPeerDisconnected.Raise(o, new ChannelEventArgs(this, newPeer)); }; newPeer.Receive(); newPeer.OnPeerRelocationRequest += (sender, e) => { if (PendingConnections.FirstOrDefault(pc => pc.Guid == e.PeerGuid && !pc.IsCancelled) != null) { AcceptPeer(newPeer); OnPeerConnected.Raise(this, new ChannelEventArgs(this, e.Peer)); lock (_lockObj) PendingConnections.Remove(PendingConnections.First(pc => pc.Guid == e.PeerGuid)); } }; } ChannelSocket.BeginAccept(AcceptCallback, null); }
public PendingPeerConnection(Guid guid, Peer.Peer peer) { Guid = guid; Peer = peer; }
public RawServerPacketEventArgs(byte[] rawData, Peer.Peer peer) { RawData = rawData; Peer = peer; }
public ChannelEventArgs(IChannel channel, Peer.Peer peer) { Channel = channel; Peer = peer; }
public static void AddToChannel(this Peer.Peer peer, IServerChannel targetChannel) { peer.HostChannel.HostServer.AddPeerToChannel(targetChannel, peer.Identity); }
/// <summary> /// Disconnects a peer from this channel /// </summary> /// <param name="peer">The peer to disconnect</param> public void DisconnectPeer(Peer.Peer peer) { peer.Disconnect(); lock (_lockObj) ConnectedPeers.Remove(peer); }