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.http.content.* import io.ktor.request.* import io.ktor.response.* 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("/benchmark"){ call.respond("0") } post("/benchmark") { val multipart = call.receiveMultipart() multipart.forEachPart { part -> when (part) { is PartData.FormItem -> { if (part.name == "description") { val msgObj: MessageObject = gson.fromJson(part.value,MessageObject::class.java) mqttClient.publish("command/${msgObj.device_id}", message) } } } } call.respond("1") } } }