コード例 #1
0
        /// <summary>
        /// Сообщить пользователю о новом запросе в друзья.
        /// </summary>
        /// <param name="userId">Идентификатор пользователя, которому поступил запрос в друзья.</param>
        /// <param name="request">Поступивший запрос в друзья.</param>
        public void NotifyUserAboutFriendRequest(Guid userId, FriendRequest request)
        {
            ComplexAccountState targetUserState = AccountStateService.Instance.GetStatusOf(userId);

            if (targetUserState == null)
            {
                throw new InvalidOperationException($"Got null target user state");
            }

            if (targetUserState.OnlineStatus == AccountOnlineStatus.Online)
            {
                using (IHttpActor actor = new HttpActor())
                {
                    string requesterAddress = $"{ targetUserState.Address }{ Subroutes.NotifyClient.NotifyFriendRequest }";
                    actor.SetRequestAddress(requesterAddress);
                    actor.AddHeader(FreengyHeaders.Server.ServerSessionTokenHeaderName, targetUserState.ClientAuth.ServerToken);

                    var result = actor.PostAsync <FriendRequest, FriendRequest>(request).Result;

                    string resultMessage = result.Success ? "Success" : result.Error.Message;

                    (
                        $"Sent friendrequest notification from '{ request.RequesterAccount.Name }' to " +
                        $"{ request.TargetAccount.Name }:{ Environment.NewLine }    { resultMessage }"
                    )
                    .WriteToConsole(ConsoleColor.DarkBlue);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Notify user about appeared reaction for his friendrequest.
        /// </summary>
        /// <param name="requesterId"></param>
        /// <param name="requestReply"></param>
        public void NotifyUserAboutFriendReply(Guid requesterId, FriendRequestReply requestReply)
        {
            ComplexAccountState requesterState = AccountStateService.Instance.GetStatusOf(requesterId);

            if (requesterState == null)
            {
                throw new InvalidOperationException($"Got null requester state");
            }

            if (requesterState.OnlineStatus == AccountOnlineStatus.Online)
            {
                using (IHttpActor actor = new HttpActor())
                {
                    string requesterAddress = $"{requesterState.Address}{Subroutes.NotifyClient.NotifyFriendRequestState}";
                    actor.SetRequestAddress(requesterAddress);
                    actor.AddHeader(FreengyHeaders.Server.ServerSessionTokenHeaderName, requesterState.ClientAuth.ServerToken);

                    var result = actor.PostAsync <FriendRequestReply, FriendRequestReply>(requestReply).Result;

                    string resultMessage = result.Success ? "Success" : result.Error.Message;

                    $"Sent friendrequest reply '{ requestReply.Reaction }' to { requesterState.ComplexAccount.Name }:{ Environment.NewLine }    { resultMessage }"
                    .WriteToConsole(ConsoleColor.Blue);
                }
            }
        }
コード例 #3
0
        private static void NotifyFriendAboutUser(ComplexAccountState userState, ComplexAccountState friendAccountState)
        {
            using (IHttpActor actor = new HttpActor())
            {
                string targetFriendAddress = $"{friendAccountState.Address}{Subroutes.NotifyClient.NotifyFriendState}";
                actor.SetRequestAddress(targetFriendAddress);
                actor.AddHeader(FreengyHeaders.Server.ServerSessionTokenHeaderName, friendAccountState.ClientAuth.ServerToken);

                var result = actor.PostAsync <AccountStateModel, AccountStateModel>(userState.ToSimple()).Result;
            }
        }
コード例 #4
0
        public void NotifyUserOfExpAddition(ComplexAccountState userState, GainExpModel expModel)
        {
            using (IHttpActor actor = new HttpActor())
            {
                //TODO добавить начисление экспы
                string address = $"{userState.Address}{Subroutes.NotifyClient.SyncExp}";
                actor.SetRequestAddress(address);
                actor.AddHeader(FreengyHeaders.Server.ServerSessionTokenHeaderName, userState.ClientAuth.ServerToken);

                $"Giving { expModel.Amount } exp to { userState.ComplexAccount.Name } for { expModel.GainReason }"
                .WriteToConsole(ConsoleColor.Yellow);

                var result = actor.PostAsync <GainExpModel, GainExpModel>(expModel).Result;
            }
        }
コード例 #5
0
        private static void GetClientState(ComplexAccountState complexAccountState)
        {
            using (var actor = new HttpActor())
            {
                string address = $"{complexAccountState.Address}{Subroutes.NotifyClient.RequestUserState}";
                actor
                .SetRequestAddress(address)
                .AddHeader(FreengyHeaders.Server.ServerSessionTokenHeaderName, complexAccountState.ClientAuth.ServerToken);

                HttpResponseMessage responce = null;
                actor
                .GetAsync()
                .ContinueWith(task =>
                {
                    if (task.Exception != null)
                    {
                        responce = null;
                        complexAccountState.FailResponceCount++;
                        logger.Error(task.Exception.GetReallyRootException(), "Failed to get async response");
                    }
                    else
                    {
                        responce = task.Result.Value;
                    }
                })
                .Wait();

                if (responce?.StatusCode != HttpStatusCode.OK)
                {
                    complexAccountState.FailResponceCount++;
                    string message = $"Client {complexAccountState.ComplexAccount.Name} replied wrong status '{ responce?.StatusCode }'. " +
                                     $"Count: {complexAccountState.FailResponceCount}";

                    message.WriteToConsole();
                }
            }
        }