public byte[] GetMyAvatar(string username)
        {
            var filter = Builders <Account> .Filter.Eq("_id", username);

            var acc    = accounts.Find(filter).FirstOrDefault();
            var avatar = Encoding.UTF8.GetBytes(encryptService.Decrypt(Encoding.UTF8.GetString(acc.avatar)));

            return(avatar);
        }
        public async Task <List <Message> > GetMessages(string roomid, string username)
        {
            var filter = Builders <Message> .Filter.Empty;
            var task   = memoryService.ChatRooms[roomid].GetCollection <Message>(username).DeleteManyAsync(filter);
            var res    = memoryService.RoomMessages[roomid].Find(filter).ToList();

            res.Sort();
            foreach (Message m in res)
            {
                m.content = encryptService.Decrypt(m.content);
            }
            await task;

            if (res is not null)
            {
                return(res);
            }
            return(res);
        }
        public async Task <SignResult> SignIn([FromBody] Account acc)
        {
            var filter = Builders <Account> .Filter.Eq("_id", acc.username);

            var update = Builders <Account> .Update.Set("connected", true);

            var myacc = accounts.Find(filter).FirstOrDefault();

            if (myacc is not null)
            {
                if (encryptService.Decrypt(myacc.password) == acc.password)
                {
                    if (myacc.connected)
                    {
                        return(new SignResult()
                        {
                            success = false, err = "Your account has already been online"
                        });
                    }
                    var task = accounts.UpdateOneAsync(filter, update);
                    memoryService.OnlineTrack[acc.username]          = new(300000);
                    memoryService.OnlineTrack[acc.username].Elapsed += (s, e) =>
                    {
                        var filter = Builders <Account> .Filter.Eq("_id", acc.username);

                        var update = Builders <Account> .Update.Set("connected", false);

                        accounts.UpdateOne(filter, update);
                        memoryService.OnlineTrack[acc.username].Stop();
                        memoryService.OnlineTrack.Remove(acc.username);
                        memoryService.OnlineTrack[acc.username].Close();
                    };
                    memoryService.OnlineTrack[acc.username].Enabled = true;
                    await task;
                    return(new SignResult()
                    {
                        success = true, avatar = myacc.avatar, rooms = myacc.rooms
                    });
                }
                return(new SignResult()
                {
                    success = false, err = "Incorrect password"
                });
            }
            return(new SignResult()
            {
                success = false, err = "Incorrect username"
            });
        }