/** @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; enum class clientState { unconnect, // starting sate connect, // zeust get a TCP connection clientIdentify, // client defien the mode of the acces (anonymous,client/user) disconnect // client is dead or loal disconnection }; class userSpecificInterface { public: zeus::WebServer* m_interfaceRouterClient; appl::GateWay* m_gatewayInterface; uint64_t m_routeurUID; private: uint64_t m_uid; uint64_t m_localIdUser; public: enum clientState m_state; // state machine ... std::vector> m_listConnectedService; ememory::SharedPtr m_userService; std::string m_userConnectionName; std::string m_clientName; std::vector m_clientgroups; std::vector m_clientServices; userSpecificInterface(const std::string& _userName); ~userSpecificInterface(); bool start(uint32_t _transactionId, appl::GateWay* _gatewayInterface, zeus::WebServer* _interfaceGateWayClient, uint64_t _routerId, uint64_t _id); void onClientData(ememory::SharedPtr _value); void returnMessage(ememory::SharedPtr _data); bool checkId(uint64_t _id) const { return m_uid == _id || m_localIdUser == _id; } void answerProtocolError(uint32_t _transactionId, const std::string& _errorHelp); }; class RouterInterface { private: uint32_t m_clientUID; private: enum clientState m_state; // state machine .. std::vector m_listUser; private: appl::GateWay* m_gatewayInterface; zeus::WebServer m_interfaceRouterClient; std::string m_userConnectionName; public: RouterInterface(const std::string& _ip, uint16_t _port, const std::string& _userName, appl::GateWay* _gatewayInterface); virtual ~RouterInterface(); void stop(); void onClientData(ememory::SharedPtr _value); bool isAlive(); void answer(uint64_t _userSessionId, const ememory::SharedPtr& _data); void clean(); }; }