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() } } }