private void AcceptConnection(AcceptConnectionEventArgs e) { var applicationProtocol = peerInitiator.PrepareAcceptIncomingConnection(e.TransportStream, out BitTorrentPeerInitiator.IContext context); applicationProtocol.AcceptConnection(new AcceptPeerConnectionEventArgs <PeerConnection>(e.TransportStream, () => { e.Accept(); var c = new PeerConnectionArgs(LocalPeerId, applicationProtocol.Metainfo, new QueueingMessageHandler(mainLoop, applicationProtocol)); return(peerInitiator.AcceptIncomingConnection(e.TransportStream, context, c)); })); }
public void AcceptIncomingConnection(AcceptConnectionEventArgs e) { var reader = new BigEndianBinaryReader(e.TransportStream.Stream); var header = ReadConnectionHeader(reader); // TODO: check if exists var applicationProtocol = _applicationProtocolLookup[header.InfoHash]; applicationProtocol.AcceptConnection(new AcceptPeerConnectionEventArgs(e.TransportStream, () => { e.Accept(); var writer = new BigEndianBinaryWriter(e.TransportStream.Stream); WriteConnectionHeader(writer, applicationProtocol.Metainfo.InfoHash, _localPeerId); return(new BitTorrentPeer( applicationProtocol.Metainfo, header.PeerId, header.ReservedBytes, header.SupportedExtensions, new QueueingMessageHandler(_mainLoop, (BitTorrentApplicationProtocol)applicationProtocol), e.TransportStream)); })); }