Ejemplo n.º 1
0
        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());
                }
            }));
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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());
                }
            }));
        }