private void CommandGetFile(Connection connection, Data dato) { string[] payload = dato.Payload.Message.Split(new string[] { PIPE_SEPARATOR }, StringSplitOptions.None); string login = payload[0]; string owner = payload[1]; string hashfile = payload[2]; FileInfo fi = FileOperationsSingleton.GetInstance().GetFile(hashfile, login); Data retDato; if (fi == null) { retDato = new Data() { Command = Command.RES, OpCode = OpCodeConstants.RES_SEARCH_FILES, Payload = new Payload() { Message = "ERROR [wrong file or not found]" } }; } else { string port = Settings.GetInstance().GetProperty("server.transfers.port", "20001"); string ip = Settings.GetInstance().GetProperty("server.ip", "127.0.0.1"); long size = fi.Length; string message = login + PIPE_SEPARATOR + owner + PIPE_SEPARATOR + hashfile + PIPE_SEPARATOR + ip + PIPE_SEPARATOR + port + PIPE_SEPARATOR + size; retDato = new Data() { Command = Command.RES, OpCode = OpCodeConstants.RES_SEARCH_FILES, Payload = new Payload() { Message = message } }; } foreach (var item in retDato.GetBytes()) { Console.WriteLine("Envio :{0}", ConversionUtil.GetString(item)); connection.WriteToStream(item); } }
//solo se permite ageagar un usuario nuevo a la vez, crea el area compartida y lo da de alta en la lista de contactos con 0 contactos y salva el archivo private bool AddNewUser(string login) { if (!contacts.ContainsKey(login)) { //ok si el directorio se cra o si ya existe bool ok = FileOperationsSingleton.GetInstance().CreateDiskSharedSpace(login); if (ok) { contacts.Set(login, ""); contacts.Save(); } return(ok); } return(false); }
private void CommandSearchFiles(Connection connection, Data dato) {//REQ07 // login + "|" + hashQuery + "|" + pattern; string[] payload = dato.Payload.Message.Split(new string[] { PIPE_SEPARATOR }, StringSplitOptions.None); string login = payload[0]; string queryHash = payload[1]; string pattern = payload[2]; List <FileObject> results = FileOperationsSingleton.GetInstance().SearchFilesMatching(pattern); StringBuilder message = new StringBuilder(); string destination = login + ARROBA_SEPARATOR + queryHash + ARROBA_SEPARATOR + Settings.GetInstance().GetProperty("server.name", "DEFAULT_SERVER"); bool first = true; foreach (var item in results) { if (first) { first = false; } else { message.Append(PIPE_SEPARATOR); } message.Append(item.ToNetworkString()); } string tmp = message.ToString(); Data retDato = new Data() { Command = Command.RES, OpCode = OpCodeConstants.RES_SEARCH_FILES, Payload = new MultiplePayload() { Message = tmp, Destination = destination } }; foreach (var item in retDato.GetBytes()) { Console.WriteLine("Envio :{0}", ConversionUtil.GetString(item)); connection.WriteToStream(item); } }
private bool CommandDownloadFile(Connection connection, Data dato) { // login + "|" + owner + "|"+hashfile; string[] payload = dato.Payload.Message.Split(ParseConstants.SEPARATOR_PIPE); string login = payload[0]; string owner = payload[1]; string hashfile = payload[2]; FileInfo fi = FileOperationsSingleton.GetInstance().GetFile(hashfile, owner); // Data retDato; if (fi == null) { /* * retDato = new Data() * { * Command = Command.RES, * OpCode = OpCodeConstants.RES_DOWNLOAD_FILE, * Payload = new Payload() { Message = "ERROR [wrong file or not found]" } * }; * foreach (var item in retDato.GetBytes()) * { * Console.WriteLine("Envio :{0}", ConversionUtil.GetString(item)); * connection.WriteToStream(item); * } * */ return(false); } else { long size = fi.Length; log.Info("Espero antes de mandar el binario"); // Thread.Sleep(2000); FileStream fileStream = fi.OpenRead(); const int BUFF_SIZE = 10000; byte[] buffer = new byte[BUFF_SIZE]; long sentData = 0; bool done = false; try { while (!done) { int countRead = fileStream.Read(buffer, 0, BUFF_SIZE); // Thread.Sleep(20); log.DebugFormat("countRead={0}", countRead); sentData += countRead; if (countRead > 0) { if (sentData == size) { done = true; } connection.WriteToNetworkStream(buffer, 0, countRead); log.DebugFormat("Enviando {2} - {0}: {3} - {1}", countRead, size, fi.FullName, sentData); // Thread.Sleep(2000); } else {//no leyo nada de la entrada (cantidad de bytes justa, en la siguiente lectura) done = true; } } connection.FlushNetworkStream(); } catch (Exception e) { log.Error("descarga", e); } fileStream.Close(); log.DebugFormat("Archivo puesto todo en el stream , y crerrado el file local"); } return(true); //terminar la conexion }