diff --git a/server/src/hardware/interface/dccexinterface.cpp b/server/src/hardware/interface/dccexinterface.cpp index 18d4b44d..2b9b9535 100644 --- a/server/src/hardware/interface/dccexinterface.cpp +++ b/server/src/hardware/interface/dccexinterface.cpp @@ -282,7 +282,10 @@ bool DCCEXInterface::setOnline(bool& value, bool simulation) m_kernel->stop(); m_kernel.reset(); - setState(InterfaceState::Offline); + if(status->state != InterfaceState::Error) + { + setState(InterfaceState::Offline); + } } return true; } diff --git a/server/src/hardware/protocol/dccex/kernel.cpp b/server/src/hardware/protocol/dccex/kernel.cpp index 99a66bb1..4c04e24e 100644 --- a/server/src/hardware/protocol/dccex/kernel.cpp +++ b/server/src/hardware/protocol/dccex/kernel.cpp @@ -32,6 +32,7 @@ #include "../../../utils/rtrim.hpp" #include "../../../core/eventloop.hpp" #include "../../../log/log.hpp" +#include "../../../log/logmessageexception.hpp" #include "../../../utils/inrange.hpp" #include "../../../utils/fromchars.hpp" #include "../../../utils/displayname.hpp" @@ -82,7 +83,20 @@ void Kernel::start() m_ioContext.post( [this]() { - m_ioHandler->start(); + try + { + m_ioHandler->start(); + } + catch(const LogMessageException& e) + { + EventLoop::call( + [this, e]() + { + Log::log(logId, e.message(), e.args()); + error(); + }); + return; + } m_startupDelayTimer.expires_after(boost::asio::chrono::milliseconds(m_config.startupDelay)); m_startupDelayTimer.async_wait(std::bind(&Kernel::startupDelayExpired, this, std::placeholders::_1));