private void ReciveFile(long fileSize, string fileName, Socket socket, ref bool fullRecived) { var segments = (fileSize / FileSenderHandler.FileSegmentSize); segments = segments * FileSenderHandler.FileSegmentSize == fileSize ? segments : segments + 1; long offset = 0; long currentSegments = 1; IFileSenderHandler senderHandler = new FileSenderHandler(); while (fileSize > offset) { ByteDataTransfer transfer = new ByteDataTransfer(); DataTransferResult result = transfer.RecieveData(socket); if (result.Header.GetCommand() == 31) { byte[] fileDataRecived = (byte[])result.objectResult; int size = 0; if (currentSegments == segments) { size = (int)(fileSize - offset); } else { size = (int)FileSenderHandler.FileSegmentSize; } senderHandler.Write(fileName, fileDataRecived); offset += size; currentSegments++; } } Console.WriteLine(Directory.GetCurrentDirectory()); fullRecived = true; }
public async Task HandleClient(Socket socket) { DataTransferSuper transfer = new StringDataTransfer(); Response response = new StringResponse(); User user; string fileName = ""; while (true) { DataTransferResult result = transfer.RecieveData(socket); int command = result.Header.GetCommand(); int dataLength = result.Header.GetDataLength(); string direction = result.Header.GetDirection(); string word = ""; if (command != 31) { word = (string)result.objectResult; } ; Log log = new Log() { Command = command, Message = word, Date = DateTime.Now, }; dynamic responseData; switch (command) { case CommandConstants.Login: try { user = Login(word); response = new StringResponse(); responseData = "true"; response.SendResponse(command, responseData, socket, responseData.Length); log.Level = Log.SUCCESS_LEVEL; log.Username = user.Username; SendLog(log); break; } catch (Exception) { response = new StringResponse(); responseData = "false"; response.SendResponse(command, responseData, socket, responseData.Length); log.Level = Log.WARNING_LEVEL; log.Username = "******"; SendLog(log); break; } case CommandConstants.SignUp: try { SignUp(word); //response = new StringResponse(); //responseData = "true"; //response.SendResponse(command, responseData, socket, responseData.Length); break; } catch (UserAlreadyExistException) { break; } case CommandConstants.ListUsers: List <string> usersList = GetUsers(); response = new ListStringResponse(); responseData = usersList; int responseDataLength = ListStringDataTransfer.ListLength(usersList); response.SendResponse(command, responseData, socket, responseDataLength); break; case CommandConstants.ListFiles: User userPhoto = new User(); userPhoto.Username = word; List <string> fileList = GetUserPhotos(userPhoto); response = new ListStringResponse(); responseData = fileList; responseDataLength = ListStringDataTransfer.ListLength(fileList); response.SendResponse(command, responseData, socket, responseDataLength); break; case CommandConstants.UploadFile: long fileSize; ReciveFileData(word, out fileName, out fileSize); transfer = new ByteDataTransfer(); break; case CommandConstants.UploadFileSignal: byte[] fileBytes = (byte[])result.objectResult; IFileSenderHandler senderHandler = new FileSenderHandler(); senderHandler.Write(fileName, fileBytes); Console.WriteLine(Directory.GetCurrentDirectory()); break; default: Console.WriteLine("Invalid command"); break; } } }