Пример #1
0
        public async Task <IActionResult> GetFriends([FromBody] GetFriends.Request req)
        {
            var res = new GetFriends.Response();

            await GetFriendsResponse(res);

            return(Ok(res));
        }
Пример #2
0
        async Task GetFriendsResponse(GetFriends.Response res)
        {
            var lists = new GetFriends.Lists();

            res.lists = lists;

            var selfPersonalDB = PDBSM.PersonalDBContext(SelfHost.playerInfo.playerId);

            var dateLog = await selfPersonalDB.DateLogs.FindAsync(SelfHost.playerInfo.playerId);

            if (dateLog == null)
            {
                dateLog = new DateLog(SelfHost.playerInfo.playerId);
            }
            res.FriendRequestPageLastView = dateLog.FriendRequestPageLastView;

            lists.Friends     = new List <GetFriends.FriendPlayer>();
            lists.Requests    = new List <GetFriends.RequestPlayer>();
            lists.MutePlayers = new List <GetFriends.MutePlayer>();

            {
                var friends = await Common2DB.Friends.Where(f => f.playerIdL == SelfHost.playerInfo.playerId).ToListAsync();

                for (int i = 0; i < friends.Count; i++)
                {
                    var state       = "";
                    var onlineState = new OnlineState(friends[i].playerIdR);
                    if (await onlineState.FetchAsync() && await new Session(onlineState.Model.sessionId).ExistsAsync())
                    {
                        state = onlineState.Model.state;
                    }

                    var onlineStamp = new OnlineStamp(friends[i].playerIdR);
                    if (!await onlineStamp.FetchAsync())
                    {
                        onlineStamp.Model.date = DateTime.MinValue;

                        var reco = await PDBSM.PersonalDBContext(friends[i].playerIdR).DateLogs.FindAsync(friends[i].playerIdR);

                        if (reco != null)
                        {
                            onlineStamp.Model.date = reco.OnlineStamp;
                        }
                        await onlineStamp.SaveAsync();
                    }

                    lists.Friends.Add(new GetFriends.FriendPlayer()
                    {
                        playerId    = friends[i].playerIdR,
                        lastLogin   = onlineStamp.Model.date,
                        onlineState = state,
                    });
                }
            }
            {
                var friends = await Common2DB.Friends.Where(f => f.playerIdR == SelfHost.playerInfo.playerId).ToListAsync();

                for (int i = 0; i < friends.Count; i++)
                {
                    var state       = "";
                    var onlineState = new OnlineState(friends[i].playerIdL);
                    if (await onlineState.FetchAsync() && await new Session(onlineState.Model.sessionId).ExistsAsync())
                    {
                        state = onlineState.Model.state;
                    }

                    var onlineStamp = new OnlineStamp(friends[i].playerIdL);
                    if (!await onlineStamp.FetchAsync())
                    {
                        onlineStamp.Model.date = DateTime.MinValue;

                        var reco = await PDBSM.PersonalDBContext(friends[i].playerIdL).DateLogs.FindAsync(friends[i].playerIdL);

                        if (reco != null)
                        {
                            onlineStamp.Model.date = reco.OnlineStamp;
                        }
                        await onlineStamp.SaveAsync();
                    }

                    lists.Friends.Add(new GetFriends.FriendPlayer()
                    {
                        playerId    = friends[i].playerIdL,
                        lastLogin   = onlineStamp.Model.date,
                        onlineState = state,
                    });
                }
            }
            var favorites = await selfPersonalDB.FavoriteFriends.Where(r => r.playerId == SelfHost.playerInfo.playerId).ToListAsync();

            lists.Friends.ForEach(friend =>
            {
                var idx = favorites.FindIndex(favorite => favorite.playerId == friend.playerId);
                if (0 <= idx)
                {
                    friend.favorite = true;
                    favorites.RemoveAt(idx);
                }
            });
            if (0 < favorites.Count)
            {
                selfPersonalDB.RemoveRange(favorites);
                await selfPersonalDB.SaveChangesAsync();
            }


            var requests = await selfPersonalDB.FriendRequests.Where(r => r.playerIdDst == SelfHost.playerInfo.playerId).ToListAsync();

            for (int i = 0; i < requests.Count; i++)
            {
                var player = new Player(requests[i].playerIdSrc);
                if (await player.Validate(PDBSM))
                {
                    lists.Requests.Add(new GetFriends.RequestPlayer()
                    {
                        playerId        = player.playerId,
                        applicationDate = requests[i].timeStamp,
                    });
                }
            }

            var mutePlayers = await selfPersonalDB.MutePlayers.Where(f => f.playerIdSrc == SelfHost.playerInfo.playerId).ToListAsync();

            for (int i = 0; i < mutePlayers.Count; i++)
            {
                var mutePlayer = mutePlayers[i];
                lists.MutePlayers.Add(new GetFriends.MutePlayer()
                {
                    playerId = mutePlayer.playerIdDst,
                    text     = mutePlayer.text,
                    voice    = mutePlayer.voice,
                });
            }
        }