Пример #1
0
        public async Task Pull(string FilePath)
        {
            WriteMessage Connect_WriteMessage = await Connect();

            OkayMessage Open_OkayMessage = await Open();

            OkayMessage SendStat_OkayMessage = await SendStat(FilePath);

            StatSyncMessage RecieveStat_StatSyncMessage = await RecieveStat();

            OkayMessage SendRecv_OkayMessage = await SendRecv(FilePath);

            FileStream FileStream = File.OpenWrite(FilePath.Split('/').Last());

            DataSyncMessage DataSyncMessage = await RecieveData();

            //Files Smaller Than 64K Fits inside the first DataSyncMessage Packet.

            if (DataSyncMessage.EndOfFile == false)
            {
                WriteMessage WriteMessage;
                string       EOF;

                while (true)
                {
                    WriteMessage = await Flows.RecieveStreamingPayloadFlow <WriteMessage>(LocalID, RemoteID);

                    await FileStream.WriteAsync(WriteMessage.Payload, 0, WriteMessage.Payload.Length);

                    EOF = Encoding.UTF8.GetString(WriteMessage.Payload.Skip(WriteMessage.Payload.Length - 8).Take(4).ToArray());

                    if (EOF == "DONE")
                    {
                        break;
                    }
                }
            }
            else
            {
                await FileStream.WriteAsync(DataSyncMessage.Payload, 0, DataSyncMessage.Payload.Length);
            }

            await FileStream.FlushAsync();

            FileStream.Close();

            OkayMessage QuiteOkay = await Flows.WriteFlow <OkayMessage>(LocalID, RemoteID, "QUIT\0\0\0\0");

            CloseMessage Close = await Flows.RecieveCloseFlow <CloseMessage>(LocalID, RemoteID);
        }
Пример #2
0
        private async Task <OkayMessage> SendStat(string FilePath)
        {
            StatSyncMessage Stat_Request = new StatSyncMessage(LocalID, RemoteID, FilePath);

            return(await Flows.WriteFlow <OkayMessage>(Stat_Request.Message));
        }