#pragma once #include "stdafx.h" #include #include "GameConnection.h" #include "../Utilities/AutoResetEvent.h" #include "../Utilities/SimpleLock.h" #include "StandardController.h" class ClientConnectionData; class GameClientConnection : public GameConnection, public INotificationListener { private: std::deque _inputData[4]; atomic _inputSize[4]; AutoResetEvent _waitForInput[4]; SimpleLock _writeLock; atomic _shutdown; atomic _enableControllers = false; atomic _minimumQueueSize = 3; vector _playerList; shared_ptr _controlDevice; shared_ptr _newControlDevice; uint32_t _lastInputSent = 0x00; bool _gameLoaded = false; uint8_t _controllerPort = GameConnection::SpectatorPort; private: void SendHandshake(); void SendControllerSelection(uint8_t port); void ClearInputData(); void PushControllerState(uint8_t port, uint8_t state); void DisableControllers(); protected: void ProcessMessage(NetMessage* message); public: GameClientConnection(shared_ptr socket, shared_ptr connectionData); ~GameClientConnection(); void ProcessNotification(ConsoleNotificationType type, void* parameter); uint8_t GetControllerState(uint8_t port); void SendInput(); void SelectController(uint8_t port); uint8_t GetAvailableControllers(); uint8_t GetControllerPort(); };