private void CommandRESContactList(Connection clientConnection, Data dato) { Dictionary <string, bool> contactList = UtilContactList.ContactListFromString(dato.Payload.Message); bool isLastPart = UtilContactList.IsLastPart(dato.Payload.Message); ClientHandler.GetInstance().OnContactListResponse(new ContactListEventArgs() { ContactList = contactList, IsLastPart = isLastPart }); }
private void CommandRESContactList(Connection clientConnection, Data entryData) { //obtengo el login del payload string login = UtilContactList.ExtractLogin(entryData.Payload.Message); //construyo un diccionario donde cada entrada es un login y el value indica si esta o no conectado Dictionary <string, bool> tmpContactList = UtilContactList.ContactListFromString(entryData.Payload.Message); //agrego la lista de contactos del usuario al cache local del DNS SingletonClientConnection.GetInstance().AddContactToClient(login, tmpContactList.Keys.ToList <string>()); //marco los contactos que estan conectados var keys = new List <string>(tmpContactList.Keys); foreach (string key in keys) { tmpContactList[key] = SingletonClientConnection.GetInstance().ClientIsConnected(key); } //envio la trama actualizada con los contactos conectados Connection loginConnection = SingletonClientConnection.GetInstance().GetClient(login); if (loginConnection != null) { Data outData = new Data() { Command = Command.RES, OpCode = OpCodeConstants.RES_CONTACT_LIST, Payload = new Payload(UtilContactList.StringFromContactList(tmpContactList, entryData.Payload.Message)) }; foreach (var item in outData.GetBytes()) { loginConnection.WriteToStream(item); } //notifico que el usuario se conecto NotifyUserChangedStatus(login, MessageConstants.STATUS_ONLINE); } else { Console.WriteLine("Tengo que descartar respuesta para {0} que no tiene Conexion", login); } }
private void CommandREQFindContacts(Connection clientConnection, Data dato) { string[] payloadSplitted = dato.Payload.Message.Split('|'); string login = payloadSplitted[0]; string pattern = payloadSplitted[1]; //me fijo que contactos de los registrados matchea con el patron recibido List <string> contactsFound = SingletonClientConnection.GetInstance().FindRegisteredClientByPattern(pattern, login); //construyo el diccionario resultado, marcando los contactos que esten conectados Dictionary <string, bool> result = new Dictionary <string, bool>(); foreach (string key in contactsFound) { result.Add(key, SingletonClientConnection.GetInstance().ClientIsConnected(key)); } //armo la lista resultado y devuelvo if (clientConnection != null) { Data outData = new Data() { Command = Command.RES, OpCode = OpCodeConstants.RES_FIND_CONTACT, Payload = new MultiplePayload() { Message = UtilContactList.StringFromContactList(result), Destination = login } }; foreach (var item in outData.GetBytes()) { clientConnection.WriteToStream(item); } } else { Console.WriteLine("Tengo que descartar respuesta para {0} que no tiene Conexion", login); } }