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