Exemple #1
0
        public UserCmdParallelExecuteManagerSystem(IGameModule gameModule,
                                                   IServerUserCmdList handler,
                                                   //  PlayerStateCollectorPool gameStateProcessorFactory,
                                                   int threadCount)
        {
            _systems   = new List <IUserCmdExecuteSystem>();
            _taskInfos = new List <TaskInfo>();
            _systems.Add(new UserCmdPreExecuteSystem());
            _systems.AddRange(gameModule.UserCmdExecuteSystems);
            _systems.Add(new UserCmdPostExecuteSystem());

            _handler = handler;
            int count = _systems.Count;

            _systemsPool = new List <IUserCmdExecuteSystem> [threadCount];
            InitTask(threadCount, count);
            _mainThread = new WorkThread("MainThread", _systems);
            WorkThread[] slaveThreads = new WorkThread[threadCount];
            for (var i = 0; i < threadCount; i++)
            {
                slaveThreads[i] = new WorkThread(String.Format("SlaveThread_{0}", i), _systemsPool[i]);
            }

            _taskDisparcher = new TaskDispatcher(threadCount, _mainThread, slaveThreads, _taskInfos);

            _mainThread.SetTaskDisparcher(_taskDisparcher);
            for (var i = 0; i < threadCount; i++)
            {
                slaveThreads[i].SetTaskDisparcher(_taskDisparcher);
            }

            _taskDisparcher.Start();
        }
 public UserCmdUpdateMsgExecuteManagerSystem(IGameModule gameModule,
                                             IServerUserCmdList handler, ISyncUpdateLatestMsgHandler syncUpdateLatestMsgHandler)
 {
     _systems = gameModule.UserCmdExecuteSystems;
     _handler = handler;
     _syncUpdateLatestMsgHandler = syncUpdateLatestMsgHandler;
     _syncToEntityProfile        =
         SingletonManager.Get <DurationHelp>().GetCustomProfileInfo("UserPrediction_SyncToEntity");
     _filtedInputProfile =
         SingletonManager.Get <DurationHelp>().GetCustomProfileInfo("UserPrediction_FiltedInput");
     Init();
 }
Exemple #3
0
        public ServerMainFeature(
            string name,
            IGameModule topLevelGameModule,
            IServerUserCmdList serrverServerUserCmdList,
            IVehicleCmdExecuteSystemHandler vehicleCmdExecuteSystemHandler,
            ISimulationTimer simluationTimer,
            IVehicleExecutionSelector vehicleExecutionSelector,
            ICommonSessionObjects sessionObjects,
            IRoom room) : base(name)
        {
            topLevelGameModule.Init();
            Add(new ModuleInitSystem(topLevelGameModule, sessionObjects.AssetManager));
            Add(new EntityCreateSystem(topLevelGameModule));

            Add(new GameStateUpdateSystem(topLevelGameModule));

            Add(new PhysicsInitSystem(topLevelGameModule));
            Add(new PhysicsUpdateSystem(topLevelGameModule));
            Add(new VehicleCmdExecuteManagerSystem(vehicleExecutionSelector, topLevelGameModule,
                                                   vehicleCmdExecuteSystemHandler, simluationTimer, true, SharedConfig.ServerAuthorative));
            Add(new PhysicsPostUpdateSystem(topLevelGameModule));
#if (true)
//            Add(new UserCmdExecuteManagerSystem(topLevelGameModule,
//                userCmdExecuteSystemHandler,
//                sessionObjects.GameStateProcessorFactory));
            Add(new UserCmdUpdateMsgExecuteManagerSystem(topLevelGameModule, serrverServerUserCmdList,
                                                         new ServerSyncUpdateLatestMsg()));
#else
            Add(new UserCmdParallelExecuteManagerSystem(topLevelGameModule,
                                                        userCmdExecuteSystemHandler,
                                                        sessionObjects.GameStateProcessorFactory, 4));
#endif

            Add(new ResourceLoadSystem(topLevelGameModule, sessionObjects.AssetManager));

            Add(new GamePlaySystem(topLevelGameModule));

            Add(new CommonLifeTimeSystem(sessionObjects.GameContexts));
            Add(new EntityCleanUpSystem(topLevelGameModule));
            Add(new CommonDestroySystem(sessionObjects));
            Add(new FreeGameRuleSystem(room));
            Add(new SendSnapshotSystem(room));
            Add(new CompensationSnapshotSystem(room));
        }