diff options
Diffstat (limited to 'orkbasecxx/messages/PingMsg.cpp')
-rw-r--r-- | orkbasecxx/messages/PingMsg.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/orkbasecxx/messages/PingMsg.cpp b/orkbasecxx/messages/PingMsg.cpp index 1f90bbe..e75beb8 100644 --- a/orkbasecxx/messages/PingMsg.cpp +++ b/orkbasecxx/messages/PingMsg.cpp @@ -11,6 +11,9 @@ * */ +#include "ace/INET_Addr.h" +#include "ace/SOCK_Connector.h" +#include "ace/SOCK_Stream.h" #include "PingMsg.h" #define PING_CLASS "ping" @@ -58,3 +61,55 @@ ObjectRef PingMsg::Process() return ref; } +//=============================== +#define TCP_PING_CLASS "tcpping" + +void TcpPingMsg::Define(Serializer* s) +{ + CStdString tcpPingClass(TCP_PING_CLASS); + s->StringValue(OBJECT_TYPE_TAG, tcpPingClass, true); + s->StringValue("hostname", m_hostname, true); + s->IntValue("port", (int&)m_port, true); +} + + +CStdString TcpPingMsg::GetClassName() +{ + return CStdString(TCP_PING_CLASS); +} + +ObjectRef TcpPingMsg::NewInstance() +{ + return ObjectRef(new TcpPingMsg); +} + +ObjectRef TcpPingMsg::Process() +{ + bool success = true; + CStdString logMsg; + ACE_SOCK_Connector connector; + ACE_SOCK_Stream peer; + ACE_INET_Addr peer_addr; + ACE_Time_Value aceTimeout (5); + + if (peer_addr.set (m_port, (PCSTR)m_hostname) == -1) + { + logMsg.Format("peer_addr.set() errno=%d", errno); + success = false; + } + else if (connector.connect (peer, peer_addr, &aceTimeout) == -1) + { + if (errno == ETIME) + { + } + logMsg.Format("connector.connect() errno=%d", errno); + success = false; + } + + SimpleResponseMsg* msg = new SimpleResponseMsg; + ObjectRef ref(msg); + msg->m_success = success; + msg->m_comment = logMsg; + return ref; +} + |