/// <summary>
 ///     Constructor.
 /// </summary>
 /// <param name="gameStatisticsPublisher">Game stats web socket publisher</param>
 /// <param name="gameRoundDataManager">Game Round Data manager</param>
 /// <param name="gameRoundLockManager">Game Round Lock manager.</param>
 /// <param name="gameRoundTimeCalculator">Game Round time calculator.</param>
 /// <param name="dateTimeSource">Source of time.</param>
 /// <param name="logger">Logging.</param>
 public StartGameRoundEventHandler(IGameStatisticsPublisher gameStatisticsPublisher,
                                   IGameRoundDataManager gameRoundDataManager,
                                   IObjectLockManager <GameRoundId> gameRoundLockManager,
                                   IGameRoundTimeCalculator gameRoundTimeCalculator,
                                   IDateTimeSource dateTimeSource,
                                   ILogger <StartGameRoundEventHandler> logger)
     : base(gameRoundDataManager: gameRoundDataManager, gameRoundLockManager: gameRoundLockManager, logger: logger)
 {
     this._gameStatisticsPublisher = gameStatisticsPublisher ?? throw new ArgumentNullException(nameof(gameStatisticsPublisher));
     this._gameRoundTimeCalculator = gameRoundTimeCalculator ?? throw new ArgumentNullException(nameof(gameRoundTimeCalculator));
     this._dateTimeSource          = dateTimeSource ?? throw new ArgumentNullException(nameof(dateTimeSource));
 }
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="ethereumNetworkRegistry">Ethereum network registry</param>
 /// <param name="groupNameGenerator">The group name generator</param>
 /// <param name="environment">Execution environment</param>
 /// <param name="subscriptionManager">Subscription manager</param>
 /// <param name="playerCountManager">Player counter.</param>
 /// <param name="gameRoundDataManager">Game Round Manager.</param>
 /// <param name="gameRoundTimeCalculator">Game round time calculator.</param>
 /// <param name="startRoundGameHistoryBuilder">Game Round history builder.</param>
 /// <param name="ethereumBlockStatus">Ethereum block status.</param>
 /// <param name="rateLimiter">Rate limiter</param>
 /// <param name="logger">Logger</param>
 public AuthenticatedHub(IEthereumNetworkRegistry ethereumNetworkRegistry,
                         IGroupNameGenerator groupNameGenerator,
                         ExecutionEnvironment environment,
                         ISubscriptionManager subscriptionManager,
                         IPlayerCountManager playerCountManager,
                         IGameRoundDataManager gameRoundDataManager,
                         IGameRoundTimeCalculator gameRoundTimeCalculator,
                         IStartRoundGameHistoryBuilder startRoundGameHistoryBuilder,
                         IEthereumBlockStatus ethereumBlockStatus,
                         IRateLimiter rateLimiter,
                         ILogger <AuthenticatedHub> logger)
     : base(ethereumNetworkRegistry: ethereumNetworkRegistry, groupNameGenerator: groupNameGenerator, environment: environment, subscriptionManager: subscriptionManager, logger: logger)
 {
     this._playerCountManager           = playerCountManager ?? throw new ArgumentNullException(nameof(playerCountManager));
     this._gameRoundDataManager         = gameRoundDataManager ?? throw new ArgumentNullException(nameof(gameRoundDataManager));
     this._gameRoundTimeCalculator      = gameRoundTimeCalculator ?? throw new ArgumentNullException(nameof(gameRoundTimeCalculator));
     this._startRoundGameHistoryBuilder = startRoundGameHistoryBuilder ?? throw new ArgumentNullException(nameof(startRoundGameHistoryBuilder));
     this._ethereumBlockStatus          = ethereumBlockStatus ?? throw new ArgumentNullException(nameof(ethereumBlockStatus));
     this._rateLimiter = rateLimiter ?? throw new ArgumentNullException(nameof(rateLimiter));
 }