private void CommandRESGetServers(Connection connection, Data dato) { MultiplePayloadFrameDecoded decoded = MultiplePayloadFrameDecoded.Parse(dato.Payload.Message); ClientHandler.GetInstance().OnGetServersResponse(new GetServersEventArgs() { Response = decoded }); }
private void EventServerListReceivedResponse(object sender, GetServersEventArgs arg) { this.BeginInvoke((Action)(delegate { MultiplePayloadFrameDecoded payload = arg.Response; string[] destination = payload.Destination.Split('@'); string responseHashQuery = destination[1]; if (HashQuery.Equals(responseHashQuery)) //si es para la consulta actual, sino se descarta { log.DebugFormat("LLegó un payload de busqueda de servidores: {0}", payload.ToString()); if (payload.IsError) { log.Error(payload.Payload); ClearResults(); MessageBox.Show(payload.Payload); } else { string[] infoArr = payload.Payload.Split('|'); foreach (var serverStr in infoArr) { ServerInfo serverInfo = ServerInfo.Parse(serverStr); lock (serversToSearch) { serversToSearch.Add(serverInfo.Name, serverInfo); } } if (payload.IsLastpart()) { lock (serversToSearch) { foreach (var serverName in serversToSearch.Keys) { resultsByServer.Add(serverName, null); } serversToProccess = resultsByServer.Count; foreach (var serverName in serversToSearch.Keys) { ClientHandler.GetInstance().REQSearchFiles(serversToSearch[serverName], this.pattern, HashQuery); } } } else { log.DebugFormat("No terminaron de llegar los servers, set timeout de busqueda"); } } } else { log.DebugFormat("Descarto un payload de busqueda de servidores: {0}", payload.ToString()); } })); }
private bool CommandRESSearchFiles(Connection connection, Data dato) { MultiplePayloadFrameDecoded decoded = MultiplePayloadFrameDecoded.Parse(dato.Payload.Message); ClientHandler.GetInstance().OnSearchFilesResponse(new SearchFilesEventArgs() { Response = decoded, Connection = connection }); return(!decoded.IsLastpart()); }
private void OnSearchFilesResultReceived(object sender, SearchFilesEventArgs arg) { this.BeginInvoke((Action)(delegate { log.DebugFormat("OnSearchFilesResultReceived arg: {0}", arg.Response); MultiplePayloadFrameDecoded payload = arg.Response; //login + ARROBA_SEPARATOR + queryHash + ARROBA_SEPARATOR + Settings.GetInstance().GetProperty("server.name", "DEFAULT_SERVER"); string[] destination = payload.Destination.Split('@'); string responseHashQuery = destination[1]; string serverName = destination[2]; if (HashQuery.Equals(responseHashQuery)) //si es para la consulta actual, sino se descarta { log.DebugFormat("LLegó un payload deresultado de busqueda del server: {0}, con datos{1}", serverName, payload.ToString()); if (payload.IsError) { log.Error(payload.Payload); ClearResults(); MessageBox.Show(payload.Payload); btnBuscar.Enabled = true; } else { lock (resultsByServer) { if (resultsByServer[serverName] == null) { resultsByServer[serverName] = new MultiplePayloadFrameDecoded[payload.PartsTotal]; } } resultsByServer[serverName][payload.PartsCurrent - 1] = payload; if (payload.IsLastpart()) { lock (this) { serversToProccess--; } StringBuilder filesSB = new StringBuilder(); lock (resultsByServer[serverName]) { foreach (var item in resultsByServer[serverName]) { filesSB.Append(item.Payload); } } string[] infoArr = filesSB.ToString().Split('|'); foreach (var fileStr in infoArr) { if (fileStr.Length > 0)//si tiene resultados { FileObject file = FileObject.FromNetworkString(fileStr); file.Server = serverName; lock (searchResult) { searchResult.Add(file); } } } lock (this) { if (serversToProccess < 1) { log.DebugFormat("Estan todos los resultados de busquedas"); ProcesarResults(); } } } else { log.DebugFormat("No terminaron de llegar los resultados, set timeout de busqueda"); } } } else { log.DebugFormat("Descarto un payload de resultado de busqueda: {0}", payload.ToString()); } })); }
void SetupConn() // Setup connection and login { client = new TcpClient(Server, Port); // Connect to the server. netStream = client.GetStream(); br = new StreamReader(netStream, Encoding.UTF8); bw = new StreamWriter(netStream, Encoding.UTF8); #region Pruebas1 if (false) { Data data = new Data() { Command = Command.REQ, OpCode = 1, Payload = new Payload(login) }; int cont = 0; foreach (var item in data.GetBytes()) { Console.WriteLine("line " + cont++ + " --->" + ConversionUtil.GetString(item)); bw.Write(item); bw.Flush(); } Console.WriteLine("mande"); Data data2 = LoadObject(br); Console.WriteLine("line " + cont++ + " --->" + ConversionUtil.GetString(data2.GetBytes()[0])); Console.WriteLine("termino"); Console.WriteLine("Pido lista de contactos"); data = new Data() { Command = Command.REQ, OpCode = 2, Payload = new Payload(login) }; foreach (var item in data.GetBytes()) { Console.WriteLine("line " + cont++ + " --->" + ConversionUtil.GetString(item)); bw.Write(item); bw.Flush(); } Data data3 = LoadObject(br); Console.WriteLine("lista de contactos en el cliente " + cont++ + " --->" + ConversionUtil.GetString(data3.GetBytes()[0])); } #endregion #region pruebas 2 if (true) { Data data = new Data() { Command = Command.REQ, OpCode = OpCodeConstants.REQ_GET_SERVERS, Payload = new Payload(login + "@asdadadadasd") }; int cont = 0; foreach (var item in data.GetBytes()) { Console.WriteLine("line " + cont++ + " Sending --->" + ConversionUtil.GetString(item)); bw.Write(item); bw.Flush(); } Data data2 = LoadObject(br); Console.WriteLine("Llega:{0}", data2.ToString()); Console.WriteLine(MultiplePayloadFrameDecoded.Parse(data2.Payload.Message).ToString()); } #endregion CloseConn(); }