예제 #1
0
        private void CommandRESGetServers(Connection connection, Data dato)
        {
            MultiplePayloadFrameDecoded decoded = MultiplePayloadFrameDecoded.Parse(dato.Payload.Message);

            ClientHandler.GetInstance().OnGetServersResponse(new GetServersEventArgs()
            {
                Response = decoded
            });
        }
예제 #2
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());
                }
            }));
        }
예제 #3
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());
        }
예제 #4
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());
                }
            }));
        }
예제 #5
0
        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();
        }