private async Task ProcessGetFileCmd(CommandHeader cmdHeader) { var data = await NetworkHelperSequential.Read <GetFileCommandData>(_networkStream, cmdHeader.PayloadLength); var ret = new ServerResponse(); var session = SessionStorage.Instance.GetSession(data.SessionId); if (session == null) { ret.ErrorMsg = "Session does not exist"; } else if (session.Expired) { ret.ErrorMsg = "Session has expired"; //Log?.Invoke("Session has expired"); //return ret; } else { data.RelativeFilePath = PathHelpers.NormalizeRelative(data.RelativeFilePath); Msg?.Invoke($"Sending '{data.RelativeFilePath}'"); var filePath = Path.Combine(session.BaseDir, data.RelativeFilePath); var fileLength = new FileInfo(filePath).Length; var fileLengthBytes = BitConverter.GetBytes(fileLength); await NetworkHelperSequential.WriteCommandHeader(_networkStream, Commands.GetFileCmd, sizeof(long)); await NetworkHelperSequential.WriteBytes(_networkStream, fileLengthBytes); await NetworkHelperSequential.WriteFromFileAndHashAsync(_networkStream, filePath, (int)fileLength); } }
private async Task <bool> SendFiles(NetworkStream networkStream, List <SyncFileInfo> dataToUpload, SyncDatabase syncDb) { foreach (var fileInfo in dataToUpload) { var filePath = Path.Combine(_baseDir, fileInfo.RelativePath); var fileLength = new FileInfo(filePath).Length; var data = new SendFileCommandData { FileLength = fileLength, SessionId = _sessionId, RelativeFilePath = fileInfo.RelativePath, HashStr = syncDb.Files.First(x => x.RelativePath == fileInfo.RelativePath).HashStr, }; var dataBytes = Serializer.Serialize(data); await NetworkHelperSequential.WriteCommandHeader(networkStream, Commands.SendFileCmd, dataBytes.Length); await NetworkHelperSequential.WriteBytes(networkStream, dataBytes); await NetworkHelperSequential.WriteFromFileAndHashAsync(networkStream, filePath, (int)fileLength); } return(true); }