public JsonResult RunTask(int id)
        {
            TaskDetail td = taskService.Get(id);

            if (td == null)
            {
                return(Json(new { status = true, message = "执行失败!" }));
            }

            if (Utility.IsDistributedDeploy() && (td.RunAtServer == RunAtServer.Master || td.RunAtServer == RunAtServer.Search))
            {
                try
                {
                    TaskServiceClient client = new TaskServiceClient("WCFTaskService");
                    client.RunTask(id);
                }
                catch (Exception e)
                {
                    return(Json(new { message = "执行失败!" }));
                }
            }
            else
            {
                TaskSchedulerFactory.GetScheduler().Run(id);
            }

            return(Json(new { success = true, message = "执行成功!" }));
        }
示例#2
0
        protected void Application_Start(object sender, EventArgs e)
        {
            var containerBuilder = new ContainerBuilder();

            //注册运行环境
            containerBuilder.Register(c => new DefaultRunningEnvironment()).As <IRunningEnvironment>().SingleInstance();

            //注册系统日志
            containerBuilder.Register(c => new Log4NetLoggerFactoryAdapter()).As <ILoggerFactoryAdapter>().SingleInstance();

            //注册缓存
            containerBuilder.Register(c => new DefaultCacheService(new MemcachedCache(), 1.0F)).As <ICacheService>().SingleInstance();

            //注册IStoreProvider
            string fileServerRootPath = ConfigurationManager.AppSettings["DistributedDeploy:FileServerRootPath"];
            string fileServerRootUrl  = ConfigurationManager.AppSettings["DistributedDeploy:FileServerRootUrl"];
            string fileServerUsername = ConfigurationManager.AppSettings["DistributedDeploy:FileServerUsername"];
            string fileServerPassword = ConfigurationManager.AppSettings["DistributedDeploy:FileServerPassword"];

            containerBuilder.Register(c => new DefaultStoreProvider(fileServerRootPath, fileServerRootUrl, fileServerUsername, fileServerPassword)).Named <IStoreProvider>("CommonStorageProvider").SingleInstance();
            containerBuilder.Register(c => new DefaultStoreProvider(fileServerRootPath, fileServerRootUrl, fileServerUsername, fileServerPassword)).As <IStoreProvider>().SingleInstance();

            //注册任务调度器
            containerBuilder.Register(c => new QuartzTaskScheduler(RunAtServer.Master)).As <ITaskScheduler>().SingleInstance();

            //通知提醒查询器
            containerBuilder.Register(c => new NoticeReminderAccessor()).As <IReminderInfoAccessor>().SingleInstance();

            IContainer container = containerBuilder.Build();

            DIContainer.RegisterContainer(container);

            //启动主控端定时任务
            TaskSchedulerFactory.GetScheduler().Start();
        }
        public static MmApplication GetMm(ushort mmPort, ushort gamePort, GameApplication gameApplication, int maximumPlayers = 2, int mmTime = 10000, int ddosConnectionsLevel = 300, int ddosConnectionCheckInterval = 5000)
        {
            var socketFactory = new LiteNetSockFactory();
            var serializer    = new BinarySerializer();
            var serverLogger  = new ConsoleLogger("M ", LogLevel.Error | LogLevel.Info | LogLevel.Debug);

            var config = new ApplicationConfig
            {
                PublicDomainNameOrAddress = "127.0.0.1",
                ListenPorts = new List <ushort> {
                    mmPort
                },
                BindToPortHttp               = 7002,
                MaxPacketSize                = 300,
                BasePacketBufferSize         = 64,
                SendTickTimeMs               = 20,
                SocketTickTimeMs             = 10,
                SocketType                   = SocketType.BareSocket,
                ReceiveTickTimeMs            = 20,
                IsConnectionDdosProtectionOn = false
            };
            var roomPropertiesProvider = new FakeRoomPropertiesProvider3(250, maximumPlayers, mmTime);
            var taskSchedulerFactory   = new TaskSchedulerFactory(serverLogger);
            var requestSender          = new FakeSenderWithGameApplication(gameApplication, new Dictionary <byte, object> {
                { PropertyCode.RoomProperties.GameMode, (byte)GameMode.SinglePlayer }
            }, CreateRoomDelegate, UpdateRoomDelegate);

            var _mmPacketSender = new PacketBatchSender(taskSchedulerFactory, config, serverLogger);

            var _playerManager = new PlayersManager(Mock.Of <IMmMetrics>(), serverLogger);

            //_serverProvider = new MatchMakerServerInfoProvider(requestSender, taskSchedulerFactory, config, _serverLogger, _statsProvider);
            var _serverProvider = new FakeMatchMakerServerInfoProvider(requestSender, "127.0.0.1", $"{gamePort}");
            var roomApiProvider = new DefaultRoomApiProvider(requestSender, serverLogger);
            var _mmRoomManager  =
                new MM.Managers.RoomManager(_serverProvider, serverLogger, taskSchedulerFactory, roomApiProvider);

            var sender          = GetSHamanMessageSender(serializer, _mmPacketSender, config, serverLogger);
            var _mmGroupManager = new MatchMakingGroupManager(serverLogger, taskSchedulerFactory, _playerManager,
                                                              sender, Mock.Of <IMmMetrics>(), _mmRoomManager, roomPropertiesProvider, config);

            var matchMaker = new MatchMaker(_playerManager, _mmGroupManager);

            //
            // var _measures = new Dictionary<byte, object>();
            // _measures.Add(FakePropertyCodes.PlayerProperties.Level, 1);
            // matchMaker.AddMatchMakingGroup(_measures);
            matchMaker.AddRequiredProperty(FakePropertyCodes.PlayerProperties.Level);

            var senderFactory            = new ShamanMessageSenderFactory(serializer, config);
            var protectionManagerConfig  = new ConnectionDdosProtectionConfig(ddosConnectionsLevel, ddosConnectionCheckInterval, 5000, 60000);
            var connectionDdosProtection = new ConnectDdosProtection(protectionManagerConfig, taskSchedulerFactory, serverLogger);
            var protectionManager        = new ProtectionManager(connectionDdosProtection, protectionManagerConfig, serverLogger);

            //setup mm server
            return(new MmApplication(serverLogger, config, serializer, socketFactory, matchMaker,
                                     requestSender, taskSchedulerFactory, _mmPacketSender, senderFactory, _serverProvider, _mmRoomManager,
                                     _mmGroupManager, _playerManager, Mock.Of <IMmMetrics>(), protectionManager));
        }
示例#4
0
        protected void Application_End(object sender, EventArgs e)
        {
            //保存定时任务状态
            TaskSchedulerFactory.GetScheduler().SaveTaskStatus();

            //关闭全文检索索引
            foreach (SearchEngine searchEngine in SearchEngineService.searchEngines.Values)
            {
                searchEngine.Close();
            }
        }
示例#5
0
        private void linkTaskSchedule_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
        {
            ITask          task      = TaskSchedulerFactory.CreateTask();
            ITaskScheduler tasksched = TaskSchedulerFactory.CreateTaskScheduler();
            String         taskName  = "mdumpfs - Backup Task";
            Int32          i         = 0;

            // param
            System.Text.StringBuilder sbParam = new System.Text.StringBuilder();
            if (textExclude.Text.Trim().Length > 0)
            {
                sbParam.Append(" /re \"" + textExclude.Text.Trim() + "\"");
            }
            sbParam.Append(" /nogui /l " + numericLimitDay.Value);

            // タスクスケジュールアイテム 設定
            task.SetApplicationName(Application.ExecutablePath);
            task.SetComment("バックアップ元: " + comboBackupDir.Text + "\r\n" + "保存先: " + comboDestDir.Text);
            task.SetParameters(
                String.Format("\"{0}\" \"{1}\" {2}",
                              comboBackupDir.Text.TrimEnd(new Char[] { Path.DirectorySeparatorChar }),
                              comboDestDir.Text.TrimEnd(new Char[] { Path.DirectorySeparatorChar }), sbParam.ToString()));

            // タスクスケジュールアイテム 保存
            while (true)
            {
                try
                {
                    tasksched.AddWorkItem(taskName, task);
                    break;
                }
                catch (System.Runtime.InteropServices.COMException ex)
                {
                    if (ex.ErrorCode == -2147024816)
                    {
                        // ファイルがある。
                        taskName = "mdumpfs - Backup Task (" + (i++) + ")";
                    }
                    else
                    {
                        // 不明なエラー
                        return;
                    }
                }
            }

            // タスクスケジュールアイテム ダイアログ表示
            if (task != null)
            {
                task.EditWorkItem(this.Handle, 0);
            }
            //tasksched.NewWorkItem("Test Task", Guids.CTask, Guids.ITask, out taskItem);
        }
        public static GameApplication GetGame(List <ushort> gamePorts, bool isAuthOn = false)
        {
            var _roomControllerFactory   = new FakeRoomControllerFactory();
            var serverLogger             = new ConsoleLogger("G ", LogLevel.Error | LogLevel.Info | LogLevel.Debug);
            var socketFactory            = new LiteNetSockFactory();
            var serializer               = new BinarySerializer();
            var taskSchedulerFactory     = new TaskSchedulerFactory(serverLogger);
            var protectionManagerConfig  = new ConnectionDdosProtectionConfig(300, 5000, 5000, 60000);
            var connectionDdosProtection = new ConnectDdosProtection(protectionManagerConfig, taskSchedulerFactory, serverLogger);
            var protectionManager        = new ProtectionManager(connectionDdosProtection, protectionManagerConfig, serverLogger);

            var config = new ApplicationConfig
            {
                PublicDomainNameOrAddress = "127.0.0.1",
                ListenPorts                  = gamePorts,
                BindToPortHttp               = 7000,
                MaxPacketSize                = 300,
                BasePacketBufferSize         = 64,
                SendTickTimeMs               = 20,
                SocketTickTimeMs             = 10,
                SocketType                   = SocketType.BareSocket,
                ReceiveTickTimeMs            = 20,
                IsAuthOn                     = isAuthOn,
                IsConnectionDdosProtectionOn = false
            };
            var requestSender = new FakeSenderWithGameApplication(null, new Dictionary <byte, object> {
                { PropertyCode.RoomProperties.GameMode, (byte)GameMode.SinglePlayer }
            }, CreateRoomDelegate, UpdateRoomDelegate);

            var gamePacketSender = new PacketBatchSender(taskSchedulerFactory, config, serverLogger);

            var gameSenderFactory = new ShamanMessageSenderFactory(serializer, config);
            var _roomManager      = new Game.Rooms.RoomManager(serverLogger, serializer, config, taskSchedulerFactory,
                                                               _roomControllerFactory, gamePacketSender, gameSenderFactory, Mock.Of <IGameMetrics>(), new RoomStateUpdaterStub());


            //setup game server
            return(new GameApplication(
                       serverLogger,
                       config,
                       serializer,
                       socketFactory,
                       taskSchedulerFactory,
                       requestSender,
                       _roomManager,
                       gamePacketSender,
                       Mock.Of <IGameMetrics>(),
                       gameSenderFactory,
                       protectionManager));
        }
示例#7
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="context">Quartz任务运行环境</param>
        /// <remarks>外部不需调用,仅用于任务调度组建内部</remarks>
        public void Execute(IJobExecutionContext context)
        {
            int        Id   = context.JobDetail.JobDataMap.GetInt("Id");
            TaskDetail task = TaskSchedulerFactory.GetScheduler().GetTask(Id);

            if (task == null)
            {
                throw new ArgumentException("Not found task :" + task.Name);
            }


            TaskService taskService = new TaskService();

            task.IsRunning = true;
            DateTime lastStart = DateTime.UtcNow;

            try
            {
                ITask excuteTask = (ITask)Activator.CreateInstance(Type.GetType(task.ClassType));
                excuteTask.Execute(task);

                task.LastIsSuccess = true;
            }
            catch (Exception ex)
            {
                LoggerFactory.GetLogger().Error(ex, string.Format("Exception while running job {0} of type {1}", context.JobDetail.Key, context.JobDetail.JobType.ToString()));
                task.LastIsSuccess = false;
            }

            task.IsRunning = false;

            task.LastStart = lastStart;
            if (context.NextFireTimeUtc.HasValue)
            {
                task.NextStart = context.NextFireTimeUtc.Value.UtcDateTime;
            }
            else
            {
                task.NextStart = null;
            }

            task.LastEnd = DateTime.UtcNow;
            taskService.SaveTaskStatus(task);
        }
示例#8
0
        private void StartExpireTask()
        {
            var scheduler = TaskSchedulerFactory.CreateScheduler();

            if (scheduler != null)
            {
                var r           = new Random(DateTime.Now.Millisecond);
                var startOption = new StartOptions <ExpireTaskExecutor>(TimeSpan.FromSeconds(r.Next(1, 30)), TimeSpan.FromSeconds(r.Next(60, 130)))
                {
                    Initializer = s =>
                    {
                        s.CacheKey    = _cacheKey;
                        s.Deserialize = _deserialize;
                        s.Client      = _client;
                    }
                };

                scheduler.StartExecutor(startOption);
            }
        }
示例#9
0
 /// <summary>
 /// 执行定时任务
 /// </summary>
 /// <param name="taskId">定时任务的Id</param>
 public void RunTask(int taskId)
 {
     TaskSchedulerFactory.GetScheduler().Run(taskId);
 }
示例#10
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime, IServiceProvider svp)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            HttpContextCore.ServiceProvider = svp;

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            string urlSuffix = string.Empty;
            var    setting   = Configuration["UseSuffix"];

            if (setting.Equals("true", StringComparison.CurrentCultureIgnoreCase))
            {
                urlSuffix = ".aspx";
            }

            app.UseStaticFiles();
            app.UseSession();
            app.UseTimedJob();
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationScheme  = "Sexy.Cookie",
                AutomaticAuthenticate = true,
                LoginPath             = new PathString("/System/ManageLogin" + urlSuffix),
                AccessDeniedPath      = new PathString("/Error/GlobalError" + urlSuffix),
                AutomaticChallenge    = true,
                CookieHttpOnly        = true,
                ExpireTimeSpan        = TimeSpan.FromMinutes(30),
                SlidingExpiration     = true,
                ClaimsIssuer          = "http://www.sexy.com",
                CookiePath            = "/"
            });
            TaskSchedulerFactory.GetScheduler().Start();
            app.UseMvc(routes =>
            {
                //routes.MapRoute(
                //   name: "Route",
                //   template: "{*path}",
                //   defaults: new { controller = "Manage", action = "Login" } );

                routes.MapRoute(
                    name: "Error",
                    template: "Error/{action}" + urlSuffix,
                    defaults: new { controller = "Error" });

                routes.MapRoute(
                    name: "System",
                    template: "System/{action}" + urlSuffix,
                    defaults: new { controller = "System", action = "ManageLogin" });

                routes.MapRoute(
                    name: "Default",
                    template: "",
                    defaults: new { controller = "System", action = "ManageLogin" });

                routes.MapRoute(
                    name: "SystemUser",
                    template: "System/User/{action}" + urlSuffix,
                    defaults: new { controller = "SystemUser", action = "ManageUser" });

                routes.MapRoute(
                    name: "SystemPermissions",
                    template: "System/Permissions/{action}" + urlSuffix,
                    defaults: new { controller = "SystemPermissions", action = "ManagePermission" });

                routes.MapRoute(
                    name: "SystemGoods",
                    template: "System/Goods/{action}" + urlSuffix,
                    defaults: new { controller = "SystemGoods", action = "ManagerGoods" });

                routes.MapRoute(
                    name: "SystemBasics",
                    template: "System/Basics/{action}" + urlSuffix,
                    defaults: new { controller = "SystemBasics", action = "ManageOperation" });

                routes.MapRoute(
                    name: "SystemSettings",
                    template: "System/Settings/{action}" + urlSuffix,
                    defaults: new { controller = "SystemSettings", action = "SiteSettings" });

                routes.MapRoute(
                    name: "SystemPoint",
                    template: "System/Point/{action}" + urlSuffix,
                    defaults: new { controller = "SystemPoint", action = "ManagerPoint" });

                routes.MapRoute(
                    name: "SystemOrder",
                    template: "System/Order/{action}" + urlSuffix,
                    defaults: new { controller = "SystemOrder", action = "ManagerOrder" });
            });
            appLifetime.ApplicationStopped.Register(() => this.ApplicationContainer.Dispose());
        }