Example #1
0
        private void HandleRelocationPacket(PeerRelocationRequestPacket packet)
        {
            if (packet.PeerGuid != Client.Identity.Guid)
            {
                return;
            }
            var newChannel = Client.CreateChannel <TcpClientChannel>();

            newChannel.Client         = Client;
            newChannel.IsSynchronized = true;
            foreach (var op in OperationTable)
            {
                newChannel.OperationTable.Add(op.Key, op.Value);
            }
            newChannel.PacketProcessor = PacketProcessor;
            newChannel.ConnectToChannel(EndPoint.Address.ToString(), packet.Port);
            newChannel.OnPacketReceived += OnPacketReceived;
            newChannel.OnPacketSent     += OnPacketSent;
            Client.ActiveChannels.Add(newChannel);

            newChannel.Send(new PeerRelocationRequestPacket
            {
                ChannelId = packet.ChannelId,
                PeerGuid  = Client.Identity.Guid,
                Operation = PeerRelocationRequestPacket.RelocateOperation.AcceptRequest
            });
        }
Example #2
0
        public void AddPeerToChannel(IServerChannel channel, SocketIdentity identity)
        {
            var peer = ((IServerChannel)GetMainChannel()).ConnectedPeers.FirstOrDefault(p => p.Identity.Equals(identity));

            if (peer == null)
            {
                throw new ChannelOperationException("Could not locate peer");
            }

            var relocationPacket = new PeerRelocationRequestPacket
            {
                ChannelId = channel.Id,
                PeerGuid  = peer.Identity.Guid,
                Operation = PeerRelocationRequestPacket.RelocateOperation.Join,
                Port      = (int)channel.Port
            };

            lock (_channelLockObj)
                channel.PendingConnections.Add(new PendingPeerConnection(peer.Identity.Guid, peer));
            peer.SendData(relocationPacket, channel, null);
        }
Example #3
0
 private void HandleRelocationPacket(PeerRelocationRequestPacket packet)
 {
     OnPeerRelocationRequest.Raise(this, new PeerRelocationEventArgs(packet.Operation, this, packet.ChannelId, packet.PeerGuid));
 }