GVOClient.hpp
5.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/***************************************************************************
* GVOClient.hpp - VO client class *
* ----------------------------------------------------------------------- *
* copyright (C) 2013-2019 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 <http://www.gnu.org/licenses/>. *
* *
***************************************************************************/
/**
* @file GVOClient.hpp
* @brief VO client class interface definition
* @author Juergen Knoedlseder
*/
#ifndef GVOCLIENT_HPP
#define GVOCLIENT_HPP
/* __ Includes ___________________________________________________________ */
#include <string>
#include "GBase.hpp"
/* __ Forward declarations _______________________________________________ */
class GFitsHDU;
class GXml;
class GXmlNode;
class GVOTable;
/***********************************************************************//**
* @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
* VO Hub. The has_hub() method signals whether VO Hub information was
* found.
*
* The connect() method will connect the client to the VO Hub. If no VO
* Hub has been found or if the VO Hub that was found is not alive the
* client will start an own VO Hub using the GVOHub class. The
* is_connected() method signals whether the client is connected to a
* Hub.
*
* The disconnect() method disconnects a client from the VO 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;
std::string classname(void) const;
void connect(void);
void disconnect(void);
bool has_hub(void) const;
bool is_connected(void) const;
bool ping_hub(void) const;
void shutdown_hub(void) const;
GXml execute(const std::string& request) const;
void publish(const GFitsHDU& hdu);
void publish(const GVOTable& votable);
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);
bool require_hub(void);
void register_to_hub(void);
void unregister_from_hub(void);
void send_metadata(void) const;
// Low-level methods
void connect_to_hub(void) const;
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;
std::string get_hub_lockfile(void) const;
bool response_is_valid(const GXml& xml) const;
int response_error_code(const GXml& xml) const;
std::string response_error_message(const GXml& xml) 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_hub_path; //!< Hub path (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
mutable int m_socket; //!< Hub socket
};
/***********************************************************************//**
* @brief Return class name
*
* @return String containing the class name ("GVOClient").
***************************************************************************/
inline
std::string GVOClient::classname(void) const
{
return ("GVOClient");
}
#endif /* GVOCLIENT_HPP */