public BotController(GameController gameController, IClientEventReceiver clientEventReceiver) { _gameController = gameController; _clientEventReceiver = clientEventReceiver; //_serverEventSender = serverEventSender; }
public GameController(IClientEventReceiver clientEventReceiver, IServerEventSender serverEventSender, GameSettings settings) { var gameEventController = new GameEventController(); SetupGameEventHandlers(gameEventController); SetupClientEventHandlers(clientEventReceiver); _eventSender = serverEventSender; _minPlayers = settings.MinPlayers; _game = new GameEngine(gameEventController, settings); _botController = new BotController(this, clientEventReceiver); _worldBroadcastThread = new Thread(delegate() { while (true) { if (DateTime.UtcNow < _nextWorldUpdate) { continue; } Task.Run(() => BroadcastWorldUpdate()); _nextWorldUpdate = DateTime.UtcNow.AddMilliseconds(BroadcastWorldInterval); } }); _broadcastCounterThread = new Thread(delegate() { while (true) { Thread.Sleep(1000); Console.WriteLine($"{WorldBroadcastsPerSecond} world broadcasts per second"); WorldBroadcastsPerSecond = 0; } }); Start(); }
public BotController(GameController gameController, IClientEventReceiver clientEventReceiver) { _gameController = gameController; _clientEventReceiver = clientEventReceiver; _bots = new List <Bot>(); }
/// <summary> /// Subscribes to the event. /// </summary> /// <param name="iClientEventReceiver">An instance of the IClientEventReceiver class that will receive server events.</param> public void Subscribe(IClientEventReceiver iClientEventReceiver) { _dispatcher.Add((MarshalByRefObject)iClientEventReceiver); }
public SignalHub(IClientEventReceiver clientEventReceiver) { _clientEventReceiver = clientEventReceiver; }
private void SetupClientEventHandlers(IClientEventReceiver clientEventReceiver) { clientEventReceiver.Event += (sender, args) => { var player = _game.GetPlayer(args.PlayerId); switch (args.Event) { case ClientEvent.Hello: var helloDto = new HelloDto { GameSettings = new GameSettingsDto { GameTickMs = _game.GetGameTickMs() }, World = _game.GetWorldDto() }; _eventSender.SendEvent(ServerEvent.Hello, helloDto, args.PlayerId); break; case ClientEvent.ChatMessage: var messageDto = (ClientChatMessageDto)args.Dto; var colour = player.GetBike().GetColour(); var sourceColour = $"rgba({colour.R:X2},{colour.G:X2},{colour.B:X2},%A%)"; var dto = new ChatMessageDto { IsSystemMessage = false, Message = messageDto.Message, SourceColour = sourceColour, Source = player.GetName(), Timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }; _eventSender.SendEvent(ServerEvent.ChatMessage, dto, null); break; case ClientEvent.KeepAlive: _eventSender.SendEvent(ServerEvent.KeepAliveAck, args.PlayerId); break; case ClientEvent.RequestJoinGame: RequestGameJoin(args.PlayerId, (ClientGameJoinDto)args.Dto); break; case ClientEvent.RequestRespawn: _game.RequestRespawn(player); break; case ClientEvent.Update: var updateDto = (ClientUpdateDto)args.Dto; _game.HandleClientUpdate(updateDto); break; case ClientEvent.UsePowerup: if (player.GetCurrentPowerUpType() == PowerUpType.Nothing) { return; // player doesn't have a powerup } _game.RequestUsePowerUp(player); break; default: throw new ArgumentOutOfRangeException(); } }; }