64 lines
2.2 KiB
Kotlin
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")
|
|
}
|
|
}
|
|
} |