예제 #1
0
        public Room(IShamanLogger logger, ITaskSchedulerFactory taskSchedulerFactory, IRoomManager roomManager,
                    IRoomPropertiesContainer roomPropertiesContainer,
                    IRoomControllerFactory roomControllerFactory, IPacketSender packetSender,
                    Guid roomId, IRoomStateUpdater roomStateUpdater)
        {
            _logger                  = logger;
            _roomId                  = roomId;
            _roomStateUpdater        = roomStateUpdater;
            _createdOn               = DateTime.UtcNow;
            _taskScheduler           = taskSchedulerFactory.GetTaskScheduler();
            _roomPropertiesContainer = roomPropertiesContainer;
            _packetSender            = packetSender;

            _roomStats = new RoomStats(GetRoomId(), roomPropertiesContainer.GetPlayersCount());

            _roomController =
                roomControllerFactory.GetGameModeController(
                    new RoomContext(this), _taskScheduler, roomPropertiesContainer);

            _ = _taskScheduler.ScheduleOnInterval(() =>
            {
                var maxQueueSIze = _packetSender.GetMaxQueueSIze();
                _roomStats.AddMaxQueueSize(maxQueueSIze);
                _roomStats.AddAvgQueueSize(_packetSender.GetAverageQueueSize());
            }, 0, 1000, true);

            _ = _taskScheduler.ScheduleOnInterval(async() => await SendRoomStateUpdate(), 0, 2000, true);
        }
        public IRoomController GetGameModeController(IRoomContext room, ITaskScheduler taskScheduler,
                                                     IRoomPropertiesContainer roomPropertiesContainer)
        {
            if (_bundledRoomControllerFactory == null)
            {
                throw new NullReferenceException("Bundle's room factory does not registered");
            }
            var roomController = _bundledRoomControllerFactory.GetGameModeController(room, taskScheduler,
                                                                                     roomPropertiesContainer);

            if (roomController == null)
            {
                throw new NullReferenceException("Bundle's room controller is null");
            }
            return(roomController);
        }
예제 #3
0
 public IRoomController GetGameModeController(IRoomContext room, ITaskScheduler taskScheduler,
                                              IRoomPropertiesContainer roomPropertiesContainer)
 {
     return(_roomControllerFactory.GetGameModeController(room, taskScheduler,
                                                         roomPropertiesContainer));
 }
 public IRoomController GetGameModeController(IRoomContext room, ITaskScheduler taskScheduler,
                                              IRoomPropertiesContainer roomPropertiesContainer)
 {
     return(new FakeRoomController(room));
 }