/** @file * @author Edouard DUPIN * @copyright 2016, Edouard DUPIN, all right reserved * @license APACHE v2.0 (see license file) */ #pragma once #include #include #include namespace appl { class GateWay; class ClientInterface { private: enum class state { unconnect, // starting sate connect, // zeust 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: appl::GateWay* m_gatewayInterface; zeus::WebServer m_interfaceClient; public: ememory::SharedPtr m_userService; std::vector> m_listConnectedService; uint64_t m_uid; uint64_t m_uid2; std::string m_userConnectionName; std::string m_clientName; std::vector m_clientgroups; std::vector m_clientServices; public: ClientInterface(enet::Tcp _connection, appl::GateWay* _gatewayInterface); virtual ~ClientInterface(); void start(uint64_t _uid, uint64_t _uid2); void stop(); void onClientData(const ememory::SharedPtr& _value); void returnMessage(const ememory::SharedPtr& _data); bool checkId(uint64_t _id) const { return m_uid == _id || m_uid2 == _id; } bool isAlive(); void answerProtocolError(uint32_t _transactionId, const std::string& _errorHelp); }; }