示例#1
0
        public void Start()
        {
            timer.Start();
            IsRunning = true;

            // First we load the file
            LoadFile();

            // Sending the request packet
            TransferRequestPacket trp = new TransferRequestPacket(SelectedFileStructure, LocalTransferID);

            NetComm.SendByteArray(trp.ToByteArray(), TargetEndPoint);

            // Update the state
            ProcessState = SendProcessState.SentTransferRequest;

            ProcessThread = new Thread(MainLoop);
            ProcessThread.Start();
        }
示例#2
0
        private static void ProcessFileTransferRequest(IPEndPoint ep, TransferRequestPacket packet)
        {
            LocalFileStructure fStruct = packet.GetFileStructure();

            if (fStruct == null)
            {
                // Send error
                return;
            }
            // Check that its ok

            //if(fStruct.FileSize > 500000000) // Refuse if over 500mb
            //{
            //    // Send transfer refusal

            //    return;
            //}


            // set up

            int slot = GetAviableInboundTransferProcessID();

            if (slot == -1)
            {
                // Send transfer refusal. No slots aviable
                return;
            }

            // Create a new inbound process
            ActiveInboundTransferProcesses[slot] = new InboundTransferProcess(packet.GetSenderTransferID(),
                                                                              fStruct,
                                                                              ep,
                                                                              _fileHandler);

            ActiveInboundTransferProcesses[slot].OnTransferFinished += InboundTransferFinished;

            // Send Transfer acceptal
            TransferAcceptPacket ta = new TransferAcceptPacket(slot, packet.GetSenderTransferID());

            NetComm.SendByteArray(ta.ToByteArray(), ep);
        }