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()); } })); }
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()); } })); }