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 }); }
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); }
private void HandleRelocationPacket(PeerRelocationRequestPacket packet) { OnPeerRelocationRequest.Raise(this, new PeerRelocationEventArgs(packet.Operation, this, packet.ChannelId, packet.PeerGuid)); }