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