From 2b834d16abc8fd98eff91519031fdabcef7b359c 2012-04-12 20:37:52 From: Sarang Bharadwaj Date: 2012-04-12 20:37:52 Subject: [PATCH] Added code to handle errors during Server creation --- diff --git a/include/transport/transport.h b/include/transport/transport.h index 4a875754fdf857285e08a57572da3df4138771e0..3d81307fff0a6e34aab2a13c50794e739da78694 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 d32bad70330c7ae8b26e5004718ef249e5772031..80e086a41febf7593c580b76afd9243783e219cf 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)