From 2cd71973b48e71430284d1cc234556e66fe4aa2f Mon Sep 17 00:00:00 2001 From: Sarang Bharadwaj Date: Thu, 12 Apr 2012 01:55:47 +0530 Subject: [PATCH] Added code to throw handle errors during Server creation --- include/transport/transport.h | 2 ++ src/transport.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/transport/transport.h b/include/transport/transport.h index 4a875754..3d81307f 100644 --- a/include/transport/transport.h +++ b/include/transport/transport.h @@ -37,6 +37,7 @@ #include "transport/config.h" #include "transport/factory.h" #include "transport/presenceoracle.h" +#include namespace Transport { // typedef enum { CLIENT_FEATURE_ROSTERX = 2, @@ -165,6 +166,7 @@ namespace Transport { private: void handleConnected(); void handleConnectionError(const Swift::ComponentError &error); + void handleServerStopped(boost::optional e); void handlePresence(Swift::Presence::ref presence); void handleDataRead(const Swift::SafeByteArray &data); void handleDataWritten(const Swift::SafeByteArray &data); diff --git a/src/transport.cpp b/src/transport.cpp index d32bad70..80e086a4 100644 --- a/src/transport.cpp +++ b/src/transport.cpp @@ -203,6 +203,11 @@ void Component::start() { else if (m_server) { LOG4CXX_INFO(logger, "Starting component in server mode on port " << CONFIG_INT(m_config, "service.port")); m_server->start(); + + //Type casting to BoostConnectionServer since onStopped signal is not defined in ConnectionServer + //Ideally, onStopped must be defined in ConnectionServer + boost::dynamic_pointer_cast(m_server->getConnectionServer())->onStopped.connect(boost::bind(&Component::handleServerStopped, this, _1)); + // We're connected right here, because we're in server mode... handleConnected(); } @@ -226,6 +231,17 @@ void Component::handleConnected() { m_reconnectCount = 0; } +void Component::handleServerStopped(boost::optional e) { + if(e != NULL ) { + if(*e == Swift::BoostConnectionServer::Conflict) + LOG4CXX_INFO(logger, "Port "<< CONFIG_INT(m_config, "service.port") << " already in use! Stopping server.."); + if(*e == Swift::BoostConnectionServer::UnknownError) + LOG4CXX_INFO(logger, "Unknown error occured! Stopping server.."); + exit(1); + } +} + + void Component::handleConnectionError(const ComponentError &error) { onConnectionError(error); // if (m_reconnectCount == 2)