lm-sistemi-software-distrib.../src/main/kotlin/drills/drill06/exercise4/actuator/TemperatureActuatorNode.kt

45 lines
1.2 KiB
Kotlin

package drills.drill06.exercise4.actuator
import drills.drill06.exercise4.SensorNet
import org.apache.activemq.ActiveMQConnectionFactory
import javax.jms.Session
import javax.jms.TopicConnectionFactory
class TemperatureActuatorNode(
private val uri: String,
private val name: String,
private val topicName: String,
private val selector: String
) {
private val actuator = Actuator(object : VirtualAction() {
override fun getActionName(): String = name
})
init {
actuator.start()
}
fun start() {
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(uri)
val connection = factory.createTopicConnection()
connection.start()
val session = connection.createTopicSession(
false,
Session.AUTO_ACKNOWLEDGE
)
val topic = session.createTopic(topicName)
val subscriber = session.createSubscriber(
topic,
"${SensorNet.PROPERTY} $selector",
false
)
subscriber.setMessageListener {
println("$name: ${it.getDoubleProperty("temperature")}")
actuator.actuate()
}
}
}