Пример #1
0
        private static void ProcessAcknowledgePacket(AcknowledgePacket ack)
        {
            int id = ack.GetTransferID();

            if (ActiveOutboundTransferProcess != null)
            {
                ActiveOutboundTransferProcess.ReceivePacket(ack);
            }
        }
        /// <summary>
        /// Receives and processes an INetworkPacket packet
        /// </summary>
        /// <param name="packet"></param>
        public void ReceivePacket(INetworkPacket packet)
        {
            switch (packet)
            {
            case DataCarryPacket dcp:

                //using (FileStream fStream = new FileStream(TempFilePath, FileMode.Append, FileAccess.Write))
                //{
                //    fStream.Write(packet.PacketData, 0, packet.PacketData.Length);
                //}

                fStream.Write(packet.PacketData, 0, packet.PacketData.Length);

                //using (FileStream fStream = File.Open(TempFilePath, FileMode.OpenOrCreate))
                //{
                //    fStream.Seek(0, SeekOrigin.End);
                //    fStream.Write(packet.PacketData, 0, packet.PacketData.Length);
                //}

                // Send the ack packet back
                AcknowledgePacket ack = new AcknowledgePacket(dcp.PacketNumber, TransferID);
                NetComm.SendByteArray(ack.ToByteArray(), SenderEndPoint);

                // If it's marked as last, process the file
                if (dcp.IsLast)
                {
                    //ReceivedChunks.Add(new DataChunk(dcp.PacketNumber, dcp.PacketData));
                    //ProcessFinishedFile();
                    ProcessFinishedFileStream();
                }
                else
                {
                    //ReceivedChunks.Add(new DataChunk(dcp.PacketNumber, dcp.PacketData));
                }

                break;
            }
        }