예제 #1
0
        protected void Application_Error(object sender, EventArgs e)
        {
            var error = Server.GetLastError();

            Server.ClearError();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.StatusCode = 200;

            WorkHere.LogException(error);
        }
예제 #2
0
        private static void RunTimer(Uri originalUri)
        {
            //todo: low посмотреть че будет если бота заблочить или удалить чат или выкинуть его из чата
            Trace.WriteLine("Timer invoked");

            ThreadPool.QueueUserWorkItem(state =>
            {
                while (true) //todo: low узнать как узнать что скоро приложение выключится
                {
                    Thread.Sleep(10000);

                    try
                    {
                        if (WorkHere.GameEngine.Timer())
                        {
//если есть ещё работы, следим что бы сервер не лёг
                            Trace.WriteLine("Есть игры на будущее, таймер запускает сам себя");
                            try
                            {
                                using (var webClient = new WebClient())
                                {
                                    webClient.DownloadString(
                                        new UriBuilder(originalUri)
                                    {
                                        Path = "Timer.ashx", Query = string.Empty
                                    }.Uri);
                                }
                            }
                            catch (WebException exception)
                            {
                                throw new WebException($"Original Uri was {originalUri}", exception);
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        WorkHere.LogException(exception);
                    }
                    //todo: low это как бы может выключиться посередине какой-нить хрени, например пользователи сохранятся, а game нет
                }
                // ReSharper disable once FunctionNeverReturns function must work till shutdown by timer
            });
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.StatusCode = 200;

            var    stream = context.Request.GetBufferedInputStream();
            string readToEnd;

            using (var reader = new StreamReader(stream))
            {
                readToEnd = reader.ReadToEnd();
                //Trace.WriteLine(readToEnd);
            }

            var update = _jsonSerializer.Deserialize <Update>(new JsonTextReader(new StringReader(readToEnd)));

            try
            {
                TelemetryStatic.TelemetryClient = new TelemetryClient();

                TelemetryStatic.TelemetryClient.Context.Operation.Name = "Update process";
                if (WorkHere.GameEngine.ProcessUpdate(update))
                {
                    try
                    {
                        Trace.WriteLine($"Income message: {update.GetMessage().Text}");
                    }
                    catch (NotSupportedException)
                    {
                        Trace.WriteLine(readToEnd);
                    }
                }
                else
                {
                    Trace.WriteLine(readToEnd);
                }
            }
            catch (Exception exception)
            {
                WorkHere.LogException(new WrapException(readToEnd, exception));
            }
            Timer.CheckTimerRun();
        }