Exemplo n.º 1
0
 public PendingPeerConnection(Guid guid, Peer.Peer peer, int timeoutPeriod, DateTime connectionTimestamp)
 {
     Guid                = guid;
     Peer                = peer;
     TimeoutPeriod       = timeoutPeriod;
     ConnectionTimestamp = connectionTimestamp;
 }
Exemplo n.º 2
0
 public ServerPacketEventArgs(IDataPacket packet, Peer.Peer peer, IChannel channel, int rawSize)
 {
     Packet  = packet;
     Peer    = peer;
     Channel = channel;
     RawSize = rawSize;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public PendingPeerConnection(Guid guid, Peer.Peer peer)
 {
     Guid = guid;
     Peer = peer;
 }
Exemplo n.º 7
0
 public RawServerPacketEventArgs(byte[] rawData, Peer.Peer peer)
 {
     RawData = rawData;
     Peer    = peer;
 }
Exemplo n.º 8
0
 public ChannelEventArgs(IChannel channel, Peer.Peer peer)
 {
     Channel = channel;
     Peer    = peer;
 }
Exemplo n.º 9
0
 public static void AddToChannel(this Peer.Peer peer, IServerChannel targetChannel)
 {
     peer.HostChannel.HostServer.AddPeerToChannel(targetChannel, peer.Identity);
 }
Exemplo n.º 10
0
 /// <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);
 }