/*************************************************************************** * GVOClient.hpp - VO client class * * ----------------------------------------------------------------------- * * copyright (C) 2013 by Juergen Knoedlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ***************************************************************************/ /** * @file GVOClient.hpp * @brief VO client class interface definition * @author Juergen Knoedlseder */ #ifndef GVOCLIENT_HPP #define GVOCLIENT_HPP /* __ Includes ___________________________________________________________ */ #include #include "GBase.hpp" #include "GXml.hpp" #include "GXmlNode.hpp" /***********************************************************************//** * @class GVOClient * * @brief VO client class * * This class implements a client for the Virtual Observatory. Upon * construction of an instance of the class, the client will search for a * SAMP Hub. If no such Hub exists, a GammaLib owned Hub will be started * using the GVOHub class. Once a Hub is running, the client will retrieve * its information and store it. * * The connect() and disconnect() methods exist to connect or disconnect * from the Hub. Connecting means opening a socket to the Hub and registering * the client to the Hub. ***************************************************************************/ class GVOClient : public GBase { public: // Constructors and destructors GVOClient(void); GVOClient(const GVOClient& client); virtual ~GVOClient(void); // Operators GVOClient& operator=(const GVOClient& client); // Methods void clear(void); GVOClient* clone(void) const; void connect(void); void disconnect(void); bool has_hub(void) const; bool is_connected(void) const; GXml response(void) const; std::string print(const GChatter& chatter = NORMAL) const; protected: // Protected methods void init_members(void); void copy_members(const GVOClient& client); void free_members(void); bool find_hub(void); void connect_to_hub(void); void register_to_hub(void); void unregister_from_hub(void); void send_metadata(void); // Low-level methods void post_string(const std::string& string) const; std::string receive_string(void) const; std::string get_response_value(const GXml& xml, const std::string& name) const; void get_name_value_pair(const GXmlNode* node, std::string& name, std::string& value) const; std::string get_hub_lockfile(void) const; // Protected data area std::string m_name; //!< Client name std::string m_secret; //!< Secret Hub key std::string m_hub_url; //!< The XML-RPC endpoint for communication with the hub std::string m_hub_host; //!< Hub host (extracted from XML-RPC endpoint) std::string m_hub_port; //!< Hub port (extracted from XML-RPC endpoint) std::string m_version; //!< The version of the SAMP Standard Profile implemented by the hub std::string m_client_key; //!< Private client key std::string m_hub_id; //!< Hub identifier std::string m_client_id; //!< Client identifier int m_socket; //!< Hub socket }; #endif /* GVOCLIENT_HPP */