benchmark-service/src/Application.kt

64 lines
2.2 KiB
Kotlin

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<String>): 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")
}
}
}