public async Task <IActionResult> GetFriends([FromBody] GetFriends.Request req) { var res = new GetFriends.Response(); await GetFriendsResponse(res); return(Ok(res)); }
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, }); } }