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