diff --git a/src/ServiceDiscovery/Services.cpp b/src/ServiceDiscovery/Services.cpp index 47a96f9..78ae7f4 100644 --- a/src/ServiceDiscovery/Services.cpp +++ b/src/ServiceDiscovery/Services.cpp @@ -73,7 +73,7 @@ bool Services::SendAlarm(const std::string& message, unsigned int level, const s + ",\"severity\":0" + ",\"message\":\"" + message + "\"}"; - ok = ok && m_backend_client.SendMulticast(cmd_string, &err); + ok = ok && m_backend_client.SendMulticast(MulticastType::Log,cmd_string, &err); if(!ok){ std::clog<<"SendAlarm (log) error: "<655355){ @@ -572,7 +573,7 @@ bool Services::SendMonitoringData(const std::string& json_data, const std::strin std::string err=""; - if(!m_backend_client.SendMulticast(cmd_string, &err)){ + if(!m_backend_client.SendMulticast(MulticastType::Monitoring,cmd_string, &err)){ std::clog<<"SendMonitoringData error: "< signaller){ return true; } -bool ServicesBackend::SendMulticast(std::string command, std::string* err){ +bool ServicesBackend::SendMulticast(MulticastType type, std::string command, std::string* err){ // multicast send. These do not wait for a response, so no timeout. // only immediately evident errors are reported. receipt is not confirmed. if(verbosity>10) std::cout<<"ServicesBackend::SendMulticast invoked with command '"<RemoveService("slowcontrol_read"); Log("ServicesBackend Closing multicast socket",v_debug,verbosity); - close(multicast_socket); + close(log_socket); + close(mon_socket); Log("ServicesBackend Deleting Utilities class",v_debug,verbosity); if(utilities){ diff --git a/src/ServiceDiscovery/ServicesBackend.h b/src/ServiceDiscovery/ServicesBackend.h index a776dc9..7b7c791 100644 --- a/src/ServiceDiscovery/ServicesBackend.h +++ b/src/ServiceDiscovery/ServicesBackend.h @@ -46,6 +46,8 @@ struct Command { enum class SlowControlMsg { Query, Log, Alarm, Monitoring, Calibration, Config }; +enum class MulticastType { Log, Monitoring }; + class ServicesBackend { public: ServicesBackend(){}; @@ -60,7 +62,7 @@ class ServicesBackend { bool SendCommand(const std::string& topic, const std::string& command, std::string* results=nullptr, const unsigned int* timeout_ms=nullptr, std::string* err=nullptr); // multicasts - bool SendMulticast(std::string command, std::string* err=nullptr); + bool SendMulticast(MulticastType type, std::string command, std::string* err=nullptr); private: @@ -85,10 +87,12 @@ class ServicesBackend { std::vector in_polls; std::vector out_polls; - // multicast socket file descriptor - int multicast_socket=-1; + // multicast socket file descriptors + int log_socket=-1; + int mon_socket=-1; // multicast destination address structure - struct sockaddr_in multicast_addr; + struct sockaddr_in log_addr; + struct sockaddr_in mon_addr; socklen_t multicast_addrlen; // apparently works with zmq poller? zmq::pollitem_t multicast_poller;