Example #1
0
        /// <summary>
        /// 指示编写器使用远程所需的新设置并发送设置确认帧。
        /// </summary>
        /// <param name="newRemoteSettings"></param>
        /// <returns></returns>
        public async Task <Http2Error?> ApplyAndAckRemoteSettings(
            Settings newRemoteSettings)
        {
            ChangeSettingsRequest changeRequest = null;

            lock (shared.Mutex)
            {
                if (shared.CloseRequested)
                {
                    return(null);
                }

                changeRequest = new ChangeSettingsRequest
                {
                    NewRemoteSettings = newRemoteSettings,
                    Completed         = new AsyncManualResetEvent(false),
                };
                shared.ChangeSettingsRequest = changeRequest;
            }

            wakeupWriter.Set();

            await changeRequest.Completed;

            return(changeRequest.Result);
        }
        protected override void SetSettings(MatchSettings settings)
        {
            var settingsReturned = new SettingsPresentation();

            var request = new ChangeSettingsRequest { UserKey = WindowsContext.UserKey, Settings = settings };
            var response = _settingsClientProxy.SetSettings(request);
            settingsReturned.Settings = response.Settings;
            settingsReturned.SettingsChanged = response.Success;
        }
Example #3
0
        protected override void SetSettings(MatchSettings settings)
        {
            var settingsReturned = new SettingsPresentation();

            var request = new ChangeSettingsRequest {
                UserKey = _baseServiceFacade.UserKey, Settings = settings
            };
            var response = _settingsClientProxy.SetSettings(request);

            settingsReturned.Settings        = response.Settings;
            settingsReturned.SettingsChanged = response.Success;
        }
Example #4
0
        public IActionResult ChangeUserSettings([FromForm] ChangeSettingsRequest request)
        {
            var user = UserService.Get(long.Parse(User.Identity.Name));

            if (user == null)
            {
                return(NotFound(new ResponseModel
                {
                    Success = false,
                    Message = "Пользователь не найден"
                }));
            }

            if (request.Avatar != null)
            {
                var file = FileService.SaveFileForm(request.Avatar);
                file.Wait();

                user.Photo = file.Result;
            }
            else
            {
                user.Photo = null;
            }

            if (request.FirstName != user.FirstName)
            {
                user.FirstName = request.FirstName;
            }

            if (request.LastName != user.LastName)
            {
                user.LastName = request.LastName;
            }

            UserService.Update(user);

            return(Ok(new DataResponse <UserViewModel>
            {
                Data = new UserViewModel(user)
            }));
        }
Example #5
0
 public ChangeSettingsResponse SetSettings(ChangeSettingsRequest request)
 {
     return(Channel.SetSettings(request));
 }
Example #6
0
        private async Task RunAsync()
        {
            try
            {
                EnsureBuffer(Connection.PersistentBufferSize);


                if (!Connection.IsServer)
                {
                    await ClientPreface.WriteAsync(outStream);
                }

                await WriteSettingsAsync(Connection.localSettings);

                bool continueRun = true;
                while (continueRun)
                {
                    await this.wakeupWriter;

                    WriteRequest          writeRequest   = null;
                    ChangeSettingsRequest changeSettings = null;
                    bool doClose = false;

                    lock (shared.Mutex)
                    {
                        // 1: 应用新设置
                        // 2: 写一帧
                        // 3: 如果需要,请关闭连接
                        if (shared.ChangeSettingsRequest != null)
                        {
                            changeSettings = shared.ChangeSettingsRequest;
                            shared.ChangeSettingsRequest = null;
                        }
                        else
                        {
                            writeRequest = GetNextReadyWriteRequest();
                        }

                        if (changeSettings == null && writeRequest == null)
                        {
                            if (shared.CloseRequested)
                            {
                                doClose = true;
                            }
                            else
                            {
                                this.wakeupWriter.Reset();
                            }
                        }
                    }

                    if (changeSettings != null)
                    {
                        var err = ApplyNewSettings(
                            changeSettings.NewRemoteSettings);
                        if (err == null)
                        {
                            EnsureBuffer(Connection.PersistentBufferSize);
                            await WriteSettingsAckAsync();
                        }
                        changeSettings.Result = err;
                        changeSettings.Completed.Set();
                    }
                    else if (writeRequest != null)
                    {
                        EnsureBuffer(Connection.PersistentBufferSize);
                        await ProcessWriteRequestAsync(writeRequest);

                        ReleaseBuffer(Connection.PersistentBufferSize);
                    }
                    else if (doClose)
                    {
                        continueRun = false;
                    }
                }
            }
            catch (Exception e)
            {
                LogHelper.Error("ConnectionWriter.RunAsync", e);
            }


            await CloseNow(false);


            lock (shared.Mutex)
            {
                shared.CloseRequested = true;

                if (shared.ChangeSettingsRequest != null)
                {
                    shared.ChangeSettingsRequest.Completed.Set();
                    shared.ChangeSettingsRequest = null;
                }

                FinishAllOutstandingWritesLocked();
            }


            if (outBuf != null)
            {
                Connection.config.BufferPool.Return(outBuf);
                outBuf = null;
            }
        }
        public async Task <ActionResult <ChangeSettingsResponse> > ChangeSettings([FromBody] ChangeSettingsRequest req)
        {
            try
            {
                string country = req.Country;
                string town    = req.Town;
                int    radius  = req.Radius;

                if (country == null || string.IsNullOrWhiteSpace(country) || country.Length != 2)
                {
                    return new ChangeSettingsResponse()
                           {
                               statusCode = WebTypes.StatusCode.ERROR, errorMessage = "Not a valid country!"
                           }
                }
                ;
                if (town == null || string.IsNullOrWhiteSpace(town) || town.Length > 20)
                {
                    return new ChangeSettingsResponse()
                           {
                               statusCode = WebTypes.StatusCode.ERROR, errorMessage = "Not a valid town!"
                           }
                }
                ;
                if (radius > 100 || radius < 0)
                {
                    return new ChangeSettingsResponse()
                           {
                               statusCode = WebTypes.StatusCode.ERROR, errorMessage = "Not a valid radius!"
                           }
                }
                ;

                await HttpContext.Session.LoadAsync().ConfigureAwait(false);

                if (!HttpContext.Session.Keys.Contains("Id"))
                {
                    return(Unauthorized());
                }

                int UserId = HttpContext.Session.GetInt32("Id").GetValueOrDefault(-1);
                if (UserId == -1)
                {
                    return(Unauthorized());
                }

                User user = this._db.User
                            .Where(u => u.Id == UserId)
                            .FirstOrDefault();

                user.Country = req.Country;
                user.Town    = req.Town;
                user.Radius  = req.Radius;

                await this._db.SaveChangesAsync().ConfigureAwait(false);

                return(new ChangeSettingsResponse()
                {
                    statusCode = WebTypes.StatusCode.OK
                });
            }
            catch
            {
                return(new ChangeSettingsResponse()
                {
                    statusCode = WebTypes.StatusCode.ERROR, errorMessage = "Server error!"
                });
            }
        }