public void Execute(DownloadCommand command) { if (Connection == null) { Console.WriteLine("There is no connection to server!"); return; } var localFileName = $"Resources{Path.DirectorySeparatorChar}{command.FileName}"; var fileInfo = new FileInfo(localFileName); var fileLength = fileInfo.Exists ? fileInfo.Length : 0; var message = new FileInfoCommand() { CommandType = CommandType.DownloadFileRequest, ClientId = ClientId, FileName = command.FileName, IsExist = fileInfo.Exists, Size = fileLength }; Connection.Send(message); var serverFileInfoResponse = Connection.Receive().Deserialize <FileInfoCommand>(); if (serverFileInfoResponse.FileName == null) { Console.WriteLine("File not found!"); return; } var stopwatch = new Stopwatch(); stopwatch.Restart(); Connection.Send(serverFileInfoResponse); var bytesReceived = 0; using (var fileStream = File.OpenWrite(localFileName)) using (var binaryWriter = new BinaryWriter(fileStream)) { binaryWriter.BaseStream.Seek(0, SeekOrigin.End); while (bytesReceived < serverFileInfoResponse.Size - fileLength) { var filePart = Connection.Receive(); binaryWriter.Write(filePart); binaryWriter.Flush(); bytesReceived += filePart.Length; } } stopwatch.Stop(); Console.WriteLine($"File successfully downloaded! " + $"Average upload speed is {((double)bytesReceived / (1024 * 1024)) / (((double)stopwatch.ElapsedMilliseconds + 1) / 1000)} Mbps."); }
public void Visit(FileInfoCommand command) { Visit((ICommand)command); if (Root.TryFindNode(command.Id, out var node) && node is File file) { Message = $"ID={file.Id} Name={file.Name} Size={file.Size}"; } else { OnFileDoesNotExist(command.Id); } }
public async Task Handle(Command command) { var fileCommand = command as FileInfoCommand; if (!Directory.Exists($"Resources{Path.DirectorySeparatorChar}{fileCommand.ClientId}")) { Directory.CreateDirectory($"Resources{Path.DirectorySeparatorChar}{fileCommand.ClientId}"); } var localFileName = $"Resources{Path.DirectorySeparatorChar}{fileCommand.ClientId}{Path.DirectorySeparatorChar}{fileCommand.FileName}"; var fileInfo = new FileInfo(localFileName); var fileLength = fileInfo.Exists ? fileInfo.Length : 0; var serverFileInfoResponse = new FileInfoCommand() { CommandType = CommandType.UploadFileResponse, FileName = fileCommand.FileName, IsExist = fileInfo.Exists, Size = fileLength }; await _transportHandler.Send(serverFileInfoResponse.Serialize()); await using (var fileStream = File.OpenWrite(localFileName)) await using (var binaryWriter = new BinaryWriter(fileStream)) { binaryWriter.BaseStream.Seek(0, SeekOrigin.End); var bytesReceived = 0; while (bytesReceived < fileCommand.Size - fileLength) { var filePart = await _transportHandler.Receive(); binaryWriter.Write(filePart); binaryWriter.Flush(); bytesReceived += filePart.Length; } } var response = new Command() { CommandType = CommandType.UploadFileResponse }; await _transportHandler.Send(response.Serialize()); }
public void Execute(UploadCommand command) { if (Connection == null) { Console.WriteLine("There is no connection to server!"); return; } var localFileName = $"Resources{Path.DirectorySeparatorChar}{command.FileName}"; var fileInfo = new FileInfo(localFileName); if (!File.Exists(localFileName)) { Console.WriteLine("File not found!"); return; } var message = new FileInfoCommand() { CommandType = CommandType.UploadFileRequest, ClientId = ClientId, FileName = command.FileName, Size = fileInfo.Length, IsExist = true }; Connection.Send(message); var serverFileInfoResponse = Connection.Receive().Deserialize <FileInfoCommand>(); var bytes = File.ReadAllBytes(localFileName).Skip((int)serverFileInfoResponse.Size).ToArray(); var stopwatch = new Stopwatch(); stopwatch.Restart(); Connection.Send(bytes); Connection.Receive().Deserialize <Commands.Command>(); stopwatch.Stop(); Console.WriteLine($"File uploaded successfully! " + $"Average upload speed is {((double)bytes.Length / (1024 * 1024)) / (((double)stopwatch.ElapsedMilliseconds + 1) / 1000)} Mbps."); }
public async Task Handle(Command command) { var fileCommand = command as FileInfoCommand; var serverRootFileName = $"Resources{Path.DirectorySeparatorChar}{fileCommand.FileName}"; if (!Directory.Exists($"Resources{Path.DirectorySeparatorChar}{fileCommand.ClientId}")) { Directory.CreateDirectory($"Resources{Path.DirectorySeparatorChar}{command.ClientId}"); } var userFolderFileName = $"Resources{Path.DirectorySeparatorChar}{fileCommand.ClientId}{Path.DirectorySeparatorChar}{fileCommand.FileName}"; var localFileName = File.Exists(userFolderFileName) ? userFolderFileName : serverRootFileName; if (!File.Exists(localFileName)) { var fileNotFoundResponse = new FileInfoCommand() { CommandType = CommandType.DownloadFileResponse }; await _transportHandler.Send(fileNotFoundResponse.Serialize()); return; } var fileInfo = new FileInfo(localFileName); var response = new FileInfoCommand() { CommandType = CommandType.DownloadFileResponse, FileName = fileCommand.FileName, IsExist = fileInfo.Exists, Size = fileInfo.Length }; await _transportHandler.Send(response.Serialize()); (await _transportHandler.Receive()).Deserialize <FileInfoCommand>(); var bytes = File.ReadAllBytes(localFileName).Skip((int)fileCommand.Size).ToArray(); await _transportHandler.Send(bytes); }
public void Visit(FileInfoCommand command) { }