public static List <Packet> DownloadAccept(Core core, Client client, Packet packet) { PacketArg args = packet.GetArguments(new[] { typeof(int), typeof(string) }); DownloadModule module = core.GetModule <DownloadModule>(); Plexer p = core.GetModule <Plexer>(); IPEndPoint end = (IPEndPoint)client.GetSocket().RemoteEndPoint; Client c = p.ConnectToServer(end.Address.ToString(), end.Port, true, args.Get <int>(0)); int token = args.Get <int>(0); string hash = args.Get <string>(1); module.BindTask(c, (i => i.Hash == hash), token, true); return(null); }
/// <summary> /// The class constructor /// </summary> /// <param name="socket">A socket from this client</param> public Client(Socket socket, bool serverSide, DownloadModule dl = null) { Socket = socket; PacketBuilder = new PacketBuilder(); ReceivedPackets = new List <Packet>(); SendingPackets = new List <Packet>(); DisconnectCallbacks = new List <ClientDisconnectDelegate>(); if (serverSide) { byte[] a = new byte[4]; int i = Socket.Receive(a, 4, SocketFlags.None); DLToken = BitConverter.ToInt32(a, 0); if (DLToken != 0) { IsFileSocket = true; dl.BindTask(this, (elem => elem.Token == DLToken), null, false); } } }