/** @file * @author Edouard DUPIN * @copyright 2016, Edouard DUPIN, all right reserved * @license APACHE v2.0 (see license file) */ #pragma once #include #include #include #include #include #include #include namespace jus { class Client; class ServiceRemote { private: jus::Client* m_clientInterface; std::string m_name; bool m_isLinked; public: ServiceRemote(jus::Client* _clientInterface, const std::string& _name); ~ServiceRemote(); bool exist(); private: jus::FutureBase callJson(uint64_t _transactionId, const ejson::Object& _obj, jus::FutureData::ObserverFinish _callback=nullptr); uint64_t getId(); public: template jus::FutureBase call(const std::string& _functionName, _ARGS&&... _args) { uint64_t id = getId(); ejson::Object callElem = jus::createCallService(id, m_name, _functionName, std::forward<_ARGS>(_args)...); return callJson(id, callElem); } template jus::FutureBase callAction(const std::string& _functionName, _ARGS&&... _args, jus::FutureData::ObserverFinish _callback) { uint64_t id = getId(); ejson::Object callElem = jus::createCallService(id, m_name, _functionName, std::forward<_ARGS>(_args)...); return callJson(id, callElem, _callback); } }; }