Esempio n. 1
0
        private void CommandREQADDContact(Connection clientConnection, Data dato)
        {
            //en la trama viene: login que hace el request|contacto a agregar
            string login      = dato.Payload.Message.Split(ParseConstants.SEPARATOR_PIPE)[0];
            string contacto   = dato.Payload.Message.Split(ParseConstants.SEPARATOR_PIPE)[1];
            string serverName = UsersPersistenceHandler.GetInstance().GetServerName(login);

            if (serverName != null)
            {
                Connection serverConnection = SingletonServerConnection.GetInstance().GetServer(serverName);
                foreach (var item in dato.GetBytes())
                {
                    Console.WriteLine("Enviando peticion de agregar contacto al servidor");
                    serverConnection.WriteToStream(item);
                }
            }
            //agrega login a la lista de contacots de contacto
            serverName           = UsersPersistenceHandler.GetInstance().GetServerName(contacto);
            dato.Payload.Message = contacto + ParseConstants.SEPARATOR_PIPE + login;
            if (serverName != null)
            {
                Connection serverConnection = SingletonServerConnection.GetInstance().GetServer(serverName);
                foreach (var item in dato.GetBytes())
                {
                    Console.WriteLine("Enviando peticion de agregar contacto al servidor");
                    serverConnection.WriteToStream(item);
                }
            }
        }
 public List <string> FindRegisteredClientByPattern(string pattern, string exclude)
 {
     lock (this)
     {
         var           regex      = new Regex(pattern);
         List <string> tmpKeyList = new List <string>(UsersPersistenceHandler.GetInstance().GetRegisteredUsers());
         tmpKeyList.Remove(exclude);
         return(tmpKeyList.FindAll(delegate(string s) { return regex.IsMatch(s); }));
     }
 }
Esempio n. 3
0
        private void CommandREQContactList(Connection clientConnection, Data dato)
        {
            string login      = dato.Payload.Message;
            string serverName = UsersPersistenceHandler.GetInstance().GetServerName(login);

            if (serverName != null)
            {
                Connection serverConnection = SingletonServerConnection.GetInstance().GetServer(serverName);
                foreach (var item in dato.GetBytes())
                {
                    Console.WriteLine("Enviando peticion de lista de contactos al servidor");
                    serverConnection.WriteToStream(item);
                }
            }
        }
Esempio n. 4
0
        private void CommandREQServerInfo(Connection clientConnection, Data dato)
        {
            //en el payload viene el login que solicita la info
            string        serverName       = UsersPersistenceHandler.GetInstance().GetServerName(dato.Payload.Message);
            Connection    serverConnection = SingletonServerConnection.GetInstance().GetServer(serverName);
            StringBuilder sb = new StringBuilder();

            if (serverConnection == null)
            {
                //el servidor no esta online, respondo con error
                sb.Append(MessageConstants.MESSAGE_ERROR);
            }
            else
            {
                //serverName|serverIp|serverPort|transfersPort
                sb.Append(serverConnection.Name).Append(ParseConstants.SEPARATOR_PIPE);
                sb.Append(serverConnection.Ip).Append(ParseConstants.SEPARATOR_PIPE);
                sb.Append(serverConnection.Port).Append(ParseConstants.SEPARATOR_PIPE);
                sb.Append(serverConnection.TransferPort);
            }
            SendMessage(clientConnection, Command.RES, OpCodeConstants.RES_SERVER_INFO, new Payload(sb.ToString()));
        }
Esempio n. 5
0
        public Program()
        {
            log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
            log4net.GlobalContext.Properties["serverName"] = "DNS";
            log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);


            string    listenAddressStr = Settings.GetInstance().GetProperty("listen.ip", "ANY");
            IPAddress ip   = "ANY".Equals(listenAddressStr) ? IPAddress.Any : IPAddress.Parse(listenAddressStr);
            int       port = int.Parse(Settings.GetInstance().GetProperty("listen.port", "2000"));

            Console.Title = "Servidor DNS y CHAT";
            Console.WriteLine("----- DNS y CHAT Server -----");
            UsersPersistenceHandler.GetInstance().LoadUsers();
            Console.WriteLine("[{0}] Starting server...", DateTime.Now);

            server = new TcpListener(ip, port);
            server.Start();
            Console.WriteLine("[{0}] Server is running properly!", DateTime.Now);
            log.Info("Server is running properly!");

            Listen();
        }
Esempio n. 6
0
        private void CommandREQLogin(Connection clientConnection, Data dato)
        {
            string login = dato.Payload.Message;
            bool   ret   = true;

            if (!UsersPersistenceHandler.GetInstance().IsLoginRegistered(login))
            {
                try
                {
                    string serverName = FindAGoodServer();
                    //agrega el usuario y el server al registro de usuario-server
                    bool ok = UsersPersistenceHandler.GetInstance().RegisterLoginServer(login, serverName);
                    if (ok)
                    {
                        //aumenta el contador de usuarios por servidor, luego que el server agreaga el usuario
                        //ret = UsersPersistenceHandler.GetInstance().RegisterLoginServer(login, serverName);
                        AddUserToServer(login, serverName);
                    }
                    else
                    {
                        ret = false;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error : {0}", e.Message);
                    ret = false;
                }
            }

            if (ret)//si esta registrado
            {
                SingletonClientConnection scc = SingletonClientConnection.GetInstance();
                Connection oldConnection      = scc.GetClient(login);
                if (oldConnection == null)
                {
                    if (SingletonServerConnection.GetInstance().GetServer(UsersPersistenceHandler.GetInstance().GetServerName(login)) != null)
                    {
                        scc.AddClient(login, clientConnection);
                        SendMessage(clientConnection, Command.RES, OpCodeConstants.REQ_LOGIN, new Payload("SUCCESS"));
                    }
                    else
                    {
                        SendMessage(clientConnection, Command.RES, OpCodeConstants.REQ_LOGIN, new Payload("ERROR Servidor Offline"));
                        clientConnection.CloseConn();
                        ret = false;
                    }
                }
                else
                {
                    SendMessage(clientConnection, Command.RES, OpCodeConstants.REQ_LOGIN, new Payload("ERROR Login en uso"));
                    clientConnection.CloseConn();
                    ret = false;
                }
            }
            else
            {
                SendMessage(clientConnection, Command.RES, OpCodeConstants.REQ_LOGIN, new Payload("ERROR No se pudo registrar el login nuevo (server offline??)"));
                clientConnection.CloseConn();
            }
        }