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(); }
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)); }