1#ifndef __JNET__JCONTROLHOST__
2#define __JNET__JCONTROLHOST__
24namespace JPP {
using namespace JNET; }
133 public JMath<JSubscriptionList>
179 if (p != this->end() && p->getID() == subscription.
getID()) {
188 this->insert(subscription);
220 buffer +=
' ' + i->toString();
250 public JThrow<JControlHost>
271 return tag[0] ==
'_';
384 int MyId(
const std::string& nick_name)
424 JPrefix __prefix__(tag, length);
429 write((
char*) buffer, (
int) length);
435 return Throw(error, -1);
448 int PutFullData(
const std::string& tag,
const void* buffer,
const long long int length)
454 return Throw(error, -1);
457 return Throw(error, -2);
470 const std::string& buffer)
472 return PutFullData(tag, buffer.c_str(), buffer.size());
484 const std::string& buffer)
486 return PutFullData(tag, buffer.c_str(), buffer.size());
518 return Throw(error, -1);
530 int WaitHead(std::string& tag,
long long int& length)
566 return Throw(error, -1);
579 int CheckHead(std::string& tag,
long long int& length,
const int timeout_us = 0)
581 const int rvalue =
CheckHead(this->prefix, timeout_us);
584 tag = this->prefix.
getTag();
585 length = this->prefix.
getSize();
603 read((
char*) buffer, (
int) length);
608 return Throw(error, -1);
621 buffer.resize(this->prefix.
getSize());
623 return GetFullData((
char*) buffer.data(), buffer.size());
635 static int WhereIs(
const std::string& host_name,
636 const std::string& nick_name,
648 long long int length;
656 return Throw(error, -1);
680 return Throw(error, -1);
Base class for data structures with artithmetic capabilities.
Exception for ControlHost.
bool in_avail(JTimeval timeout=JTimeval::min()) const
Check availability of input.
Auxiliary base class for controling the throwing of exceptions.
static void Throw(const bool option)
Auxiliary class for time values.
static JTimeval min()
Get minimal time value.
int MyId(const std::string &nick_name)
Identify.
JControlHost(const std::string &server, const int port)
Constructor.
int PutFullString(const JTag &tag, const std::string &buffer)
Send string.
static int WhereIs(const std::string &host_name, const std::string &nick_name, std::string &answer)
Locate ControlHost client(s).
int GetFullString(std::string &buffer)
Receive string.
JControlHost(const JHostname &server)
Constructor.
int WaitHead(std::string &tag, long long int &length)
Wait for header.
JControlHost(JControlHost &&)
int WaitHead(JPrefix &prefix)
Wait for header.
int CheckHead(JPrefix &prefix, JTimeval timeout=JTimeval::min())
Check for header, without waiting.
JControlHost()
Default constructor.
int configure()
Configure socket (factory reset).
int GetFullData(void *buffer, long long int length)
Receive data.
JControlHost & operator=(const JControlHost &)
int SendMeAlways()
Tell server to send messages forever.
static bool maybe_special(const JTag &tag)
Check special ControlHost tags.
int Subscribe(const JSubscriptionList &subscription)
Subscribe to list of tags.
int PutFullData(const std::string &tag, const void *buffer, const long long int length)
Send data.
JControlHost(const JControlHost &)
JControlHost(const JTCPSocket &socket)
Constructor.
static bool is_valid(const char c)
Check validity of subscription specifier.
int SendMeNext()
Tell server to send next message.
~JControlHost()
Destructor.
int PutFullData(const JTag &tag, const void *buffer, const long long int length)
Send data.
int PutFullString(const std::string &tag, const std::string &buffer)
Send string.
JControlHost & operator=(JControlHost &&)
JControlHost(const int ip_number, const int port=DISPATCH_PORT)
Constructor.
int CheckHead(std::string &tag, long long int &length, const int timeout_us=0)
Check for header, without waiting.
int Subscribe(const JSubscription &subscription)
Subscribe to single tag.
int Connected()
Send version.
int getSize() const
Get size.
int read(char *buffer, const int length) override
Read data from socket.
int write(const char *buffer, const int length) override
Write data to socket.
void setReceiveBufferSize(const int size)
Set receive buffer size.
int shutdown()
Shut down socket.
void setReuseAddress(const bool on)
Set reuse address.
void setKeepAlive(const bool on)
Set keep alive of socket.
void setSendBufferSize(const int size)
Set send buffer size.
JSubscriptionList & add(const JSubscriptionList &subscription)
Add subscription.
std::string toString() const
Convert subscription list to string.
std::set< JSubscription >::const_iterator const_iterator
JSubscriptionList(const JSubscription &subscription)
Copy constructor.
JSubscriptionList & add(const JSubscription &subscription)
Add subscription.
JSubscriptionList()
Default constructor.
std::set< JSubscription >::const_reverse_iterator const_reverse_iterator
const std::set< JSubscription > * operator->() const
Smart pointer.
ControlHost subscription.
JSubscription_t subscription
JSubscription_t getSubscription() const
Get subscription type.
std::string toString() const
Convert subscription to string.
JSubscription(const JSubscription_t sub, const JTag &tag)
Constructor.
void connect(const int port)
Connect to port on local host.
void setNonBlocking(const bool on)
Set non-blocking of I/O.
void setTcpNoDelay(const bool on)
Set TCP no-delay.
std::string toString() const
Convert tag to string.
const JTag & getTag() const
Get tag.
JTag_t getID() const
Get identifier.
static const JTag DISPTAG_Always("_Always")
JSubscriptionList operator+(const JSubscription &first, const JSubscription &second)
Add operator.
static const JTag DISPTAG_Gime("_Gime")
JSubscription_t
ControlHost subscription types.
static const JTag DISPTAG_Version("_Version")
static const int DISPATCH_PORT
Default ControlHost port.
static const JTag DISPTAG_WhereIs("_WhereIs")
static const JTag DISPTAG_MyId("_MyId")
static const JTag DISPTAG_Subscribe("_Subscri")
Special ControlHost tags.
JControlHost ControlHost
Match name.
static const std::string CHOO_VERSION
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary base class for aritmetic operations of derived class types.
Auxiliary data structure for hostname and port number.
Auxiliary class for all subscription.
JSubscriptionAll(const JTag &tag)
Constructor.
Auxiliary class for any subscription.
JSubscriptionAny(const JTag &tag)
Constructor.