void *VSCPMQTTBrokerThread::Entry() { struct mg_mgr mgr; struct mg_connection *nc; struct mg_mqtt_broker brk; const char *address = "0.0.0.0:1883"; // Check pointers if ( NULL == m_pCtrlObject ) return NULL; // We need to create a clientobject and add this object to the list m_pClientItem = new CClientItem; if ( NULL == m_pClientItem ) { m_pCtrlObject->logMsg( _( "[VSCP MQTT Broker] Unable to allocate memory for client.\n" ) ); return NULL; } // This is now an active Client m_pClientItem->m_bOpen = true; m_pClientItem->m_type = CLIENT_ITEM_INTERFACE_TYPE_CLIENT_UDP; m_pClientItem->m_strDeviceName = _("VSCP MQTT Broker: Started at "); wxDateTime now = wxDateTime::Now(); m_pClientItem->m_strDeviceName += now.FormatISODate(); m_pClientItem->m_strDeviceName += _(" "); m_pClientItem->m_strDeviceName += now.FormatISOTime(); // Add the client to the Client List m_pCtrlObject->m_wxClientMutex.Lock(); m_pCtrlObject->addClient( m_pClientItem ); m_pCtrlObject->m_wxClientMutex.Unlock(); // Clear the filter (Allow everything ) vscp_clearVSCPFilter( &m_pClientItem->m_filterVSCP ); mg_mgr_init( &mgr, this ); mg_mqtt_broker_init( &brk, NULL ); if ( ( nc = mg_bind( &mgr, m_pCtrlObject->m_strMQTTBrokerInterfaceAddress.mbc_str(), mg_mqtt_broker ) ) == NULL) { m_pCtrlObject->logMsg( _("VSCP MQTT Broker: Faild to bind to requested address.\n") ); return NULL; } nc->user_data = &brk; m_pCtrlObject->logMsg( _("VSCP MQTT Broker: Thread started.\n") ); while ( !TestDestroy() && !m_bQuit ) { mg_mgr_poll( &mgr, 1000 ); } // release the server //ns_mgr_free( &m_pCtrlObject->m_mgrTcpIpServer ); mg_mgr_free( &mgr ); m_pCtrlObject->logMsg( _( "VSCP MQTT Broker: Quit.\n" ) ); return NULL; }
int main(void) { struct mg_mgr mgr; const char *address = "0.0.0.0:1883"; struct mg_connection *nc; struct mg_mqtt_broker brk; mg_mgr_init(&mgr, NULL); mg_mqtt_broker_init(&brk, NULL); if ((nc = mg_bind(&mgr, address, mg_mqtt_broker)) == NULL) { fprintf(stderr, "mg_bind(%s) failed\n", address); exit(EXIT_FAILURE); } nc->user_data = &brk; /* * TODO: Add a HTTP status page that shows current sessions * and subscriptions */ for (;;) { mg_mgr_poll(&mgr, 1000); } }