45 lines
1.2 KiB
Kotlin
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()
|
|
}
|
|
}
|
|
}
|