/** @file * @author Edouard DUPIN * @copyright 2016, Edouard DUPIN, all right reserved * @license APACHE v2.0 (see license file) */ #pragma once #include #include #include #include namespace jus { class GateWay; class GateWayClient { private: using Observer = std::function; enum class state { unconnect, // starting sate connect, // just get a TCP connection userIdentify, // client set the user it want to access clientIdentify, // client defien the mode of the acces (anonymous,client/user) disconnect // client is dead or loal disconnection }; enum state m_state; // state machine ... private: jus::GateWay* m_gatewayInterface; jus::TcpString m_interfaceClient; void protocolError(const std::string& _errorHelp); void returnBool(int32_t _transactionId, bool _value); public: esignal::Signal signalIsConnected; ememory::SharedPtr m_userService; std::vector> m_listConnectedService; size_t m_uid; std::string m_userConnectionName; std::string m_clientName; std::vector m_clientgroups; std::mutex m_mutex; std::vector> m_actions; int32_t m_transactionLocalId; public: GateWayClient(enet::Tcp _connection, jus::GateWay* _gatewayInterface); virtual ~GateWayClient(); void start(size_t _uid); void stop(); void onClientData(std::string _value); void returnMessage(ejson::Object _data); size_t getId() const { return m_uid; } bool isAlive(); }; }