package com.kmlabz.birbnetes import com.google.gson.GsonBuilder import com.typesafe.config.ConfigFactory import io.ktor.application.* import io.ktor.config.* import io.ktor.request.* import io.ktor.routing.* import io.ktor.util.* import kotlin.text.toCharArray import org.eclipse.paho.client.mqttv3.MqttClient import org.eclipse.paho.client.mqttv3.MqttConnectOptions import org.eclipse.paho.client.mqttv3.MqttMessage import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence fun main(args: Array): Unit = io.ktor.server.netty.EngineMain.main(args) @KtorExperimentalAPI @Suppress("unused") // Referenced in application.conf @kotlin.jvm.JvmOverloads fun Application.module(testing: Boolean = false) { val appConfig = HoconApplicationConfig(ConfigFactory.load()) val persistence = MemoryPersistence() val mqttClient = MqttClient(appConfig.property("ktor.mq.broker").getString(), MqttClient.generateClientId(), persistence) val connOpts = MqttConnectOptions() val gson = GsonBuilder().create() val message = MqttMessage("0".toByteArray()) environment.monitor.subscribe(ApplicationStarted){ connOpts.isCleanSession = true connOpts.userName = appConfig.property("ktor.mq.username").getString() connOpts.password = appConfig.property("ktor.mq.password").getString().toCharArray() mqttClient.connect(connOpts) message.qos = 0 } environment.monitor.subscribe(ApplicationStopped){ mqttClient.disconnect() } routing { get("/") { val requestBody : String = call.receiveText() val msgObj: MessageObject = gson.fromJson(requestBody,MessageObject::class.java) mqttClient.publish("command/${msgObj.device_id}", message) } } }