예제 #1
0
        private dynamic OnAddFriendRequest(dynamic arg)
        {
            var friendRequest = new SerializeHelper().DeserializeObject <FriendRequest>(Request.Body);

            $"Got a friend request from { friendRequest.RequesterAccount.Name } to { friendRequest.TargetAccount.Name }".WriteToConsole();

            RegistrationService  registrationService  = RegistrationService.Instance;
            FriendRequestService friendRequestService = FriendRequestService.Instance;

            if (registrationService.FindByName(friendRequest.RequesterAccount.Name) != null)
            {
                ComplexFriendRequest result = friendRequestService.Save(friendRequest);

                friendRequest.RequestState = result.RequestState;

                $"Saved request with result '{ friendRequest.RequestState }'".WriteToConsole();

                string serialized = new SerializeHelper().Serialize(friendRequest);

                Task.Run(() =>
                {
                    UserInformerService.Instance.NotifyUserAboutFriendRequest(friendRequest.TargetAccount.Id, friendRequest);
                });

                return(serialized);
            }

            $"Target acount { friendRequest.TargetAccount.Name } doesnt exist".WriteToConsole();

            friendRequest.RequestState = FriendRequestState.DoesntExist;

            return(friendRequest);
        }
예제 #2
0
        private dynamic OnFriendRequestReply(dynamic arg)
        {
            var helper       = new SerializeHelper();
            var requestReply = helper.DeserializeObject <FriendRequestReply>(Request.Body);

            $"Got a friend request reply from { requestReply.Request.TargetAccount.Name } to { requestReply.Request.RequesterAccount.Name }"
            .WriteToConsole();

            Guid        senderId   = requestReply.Id;
            SessionAuth clientAuth = Request.Headers.GetSessionAuth();

            if (!AccountStateService.Instance.IsAuthorized(senderId, clientAuth.ClientToken))
            {
                throw new ClientNotAuthorizedException(senderId);
            }

            AccountStateService  stateService         = AccountStateService.Instance;
            UserInformerService  informerService      = UserInformerService.Instance;
            FriendRequestService friendRequestService = FriendRequestService.Instance;

            ComplexFriendRequest processedRequest = friendRequestService.ReplyToRequest(requestReply);

            Task.Run(() =>
            {
                informerService.NotifyUserAboutFriendReply(requestReply.Request.RequesterAccount.Id, requestReply);
            });

            requestReply.EstablishedDate = processedRequest.DecisionDate;
            var serialized = helper.Serialize(requestReply);

            return(serialized);
        }
예제 #3
0
        private dynamic OnSearchFriendRequestRequest(dynamic arg)
        {
            var          searchRequest = new SerializeHelper().DeserializeObject <SearchRequest>(Request.Body);
            SearchEntity searchEntity  = searchRequest.Entity;

            if (searchEntity != SearchEntity.IncomingFriendRequests &&
                searchEntity != SearchEntity.OutgoingFriendRequests)
            {
                throw new InvalidOperationException($"Search entity '{ searchEntity }' must not be sent to this controller");
            }

            AccountStateService  stateService   = AccountStateService.Instance;
            FriendRequestService requestService = FriendRequestService.Instance;

            SessionAuth clientAuth = Request.Headers.GetSessionAuth();

            if (!stateService.IsAuthorized(searchRequest.SenderId, clientAuth.ClientToken))
            {
                throw new ClientNotAuthorizedException(searchRequest.SenderId);
            }

            IEnumerable <ComplexFriendRequest> requests =
                searchEntity == SearchEntity.IncomingFriendRequests ?
                requestService.GetIncomingRequests(searchRequest.SenderId) :
                requestService.GetOutgoingRequests(searchRequest.SenderId);

            IEnumerable <FriendRequest> clientModels = requests.Select(complexModel => complexModel.ToSimple());
            string serialized = new SerializeHelper().Serialize(clientModels);

            return(serialized);
        }
예제 #4
0
        //发起一次用户好友请求
        public ActionResult SendFriendRequest()
        {
            bool   state   = false;
            string message = string.Empty;

            try
            {
                FriendRequestService.AddFriendRequest(sessionModel.User.UserId, Convert.ToInt32(Request["friendid"]),
                                                      sessionModel.User.UserName, Convert.ToInt32(Request["gid"]), Request["note"]);
            }
            catch (UserException e)
            {
                message = e.Message;
                state   = true;
            }
            return(Content(JsonString.GetString(new { state = state, message = message })));
        }
예제 #5
0
        public ActionResult PassRequest()
        {
            int    friendrequestid = Convert.ToInt32(Request["frid"]);
            int    gid             = Convert.ToInt32(Request["gid"]);
            string message         = string.Empty;
            bool   state           = false;

            try
            {
                FriendRequestService.PassFriendRequest(friendrequestid, sessionModel.User.UserId,
                                                       sessionModel.User.UserName, gid, Request["note"]);
                state   = true;
                message = "添加好友成功";
            }
            catch (UserException e)
            {
                message = e.Message;
            }
            return(Content(JsonString.GetString(new { state = state, message = message })));
        }