public async Task <IActionResult> ResponseFriendRequest([FromBody] ResponseFriendRequest.Request req) { var requester = new evosequencing.ProtocolModels.Friend.ResponseFriendRequest(); requester.request.playerIdSrc = req.playerId; requester.request.playerIdDst = SelfHost.playerInfo.playerId; requester.request.approved = req.approved; var response = await requester.PostAsyncXXX(SequencingServerInfo.Uri); if (response.StatusCode != System.Net.HttpStatusCode.OK) { return(BuildErrorResponse(Error.LowCode.ServerInternalError)); } if (response.Payload.resultCode == evosequencing.ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.Ok) { Logger.Logging( new LogObj().AddChild(new LogModels.ResponseFriend { PlayerIdSrc = req.playerId.Value, PlayerIdDst = SelfHost.playerInfo.playerId, Date = DateTime.UtcNow, Type = (req.approved.Value) ? evolib.Social.ResponseType.Admit : evolib.Social.ResponseType.Deny, }) ); } switch (response.Payload.resultCode) { case evosequencing.ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.Ok: var res = new ResponseFriendRequest.Response(); await GetFriendsResponse(res); return(Ok(res)); case evosequencing.ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.HisFriendsCntLimit: return(BuildErrorResponse(Error.LowCode.HisFriendsCntLimit)); case evosequencing.ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.MyFriendsCntLimit: return(BuildErrorResponse(Error.LowCode.MyFriendsCntLimit)); default: return(BuildErrorResponse(Error.LowCode.Others)); } }
public async Task <IActionResult> ResponseFriendRequest([FromBody] ResponseFriendRequest.Request req) { var res = new ResponseFriendRequest.Response(); res.resultCode = ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.Unknown; await DependJobManager.Enqueue(req.playerIdDst.Value, req.playerIdSrc.Value, async() => { var personalDB = PDBSM.PersonalDBContext(req.playerIdDst.Value); var friendRequest = await personalDB.FriendRequests.FindAsync(req.playerIdDst, req.playerIdSrc); if (friendRequest == null) { res.resultCode = ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.RequestNotFound; return; } if (false == req.approved) { personalDB.FriendRequests.Remove(friendRequest); await personalDB.SaveChangesAsync(); res.resultCode = ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.Ok; return; } var myFriendCnt = await Common2DB.Friends.CountAsync(r => r.playerIdL == req.playerIdDst || r.playerIdR == req.playerIdDst); if (evolib.Social.MaxFriendCnt <= myFriendCnt) { res.resultCode = ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.MyFriendsCntLimit; return; } var hisFriendCnt = await Common2DB.Friends.CountAsync(r => r.playerIdL == req.playerIdSrc || r.playerIdR == req.playerIdSrc); if (evolib.Social.MaxFriendCnt <= hisFriendCnt) { res.resultCode = ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.HisFriendsCntLimit; return; } personalDB.FriendRequests.Remove(friendRequest); await personalDB.SaveChangesAsync(); var friend = Friend.Create(req.playerIdDst.Value, req.playerIdSrc.Value); await Common2DB.Friends.AddAsync(friend); await Common2DB.SaveChangesAsync(); res.resultCode = ProtocolModels.Friend.ResponseFriendRequest.Response.ResultCode.Ok; //PUSH var player = new Player(req.playerIdSrc.Value); await player.FetchAsync(); if (await new Session(player.Model.sessionId).ExistsAsync()) { await new ConnectionQueue(player.Model.sessionId).EnqueueAsync(new UpdateFriends()); } }); return(Ok(res)); }