This commit is contained in:
parent
97f6fcbf82
commit
d8f4e8bedf
@ -4,7 +4,7 @@
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="ES6" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
@ -20,6 +20,7 @@ group = "it.norangeb.unisannio"
|
||||
dependencies {
|
||||
implementation(kotlin("stdlib-jdk8"))
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5")
|
||||
implementation("org.apache.activemq:activemq-client:5.15.12")
|
||||
testCompile("junit", "junit", "4.12")
|
||||
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.7.0-beta2")
|
||||
}
|
||||
|
@ -501,7 +501,7 @@ style:
|
||||
active: true
|
||||
maxJumpCount: 1
|
||||
MagicNumber:
|
||||
active: true
|
||||
active: false
|
||||
excludes: "**/test/**,**/androidTest/**,**/*.Test.kt,**/*.Spec.kt,**/*.Spek.kt"
|
||||
ignoreNumbers: '-1,0,1,2,3,42,100,500,1000,4242'
|
||||
ignoreHashCodeFunction: true
|
||||
|
28
src/main/kotlin/drills/drill06/exercise1/point1/Receiver.kt
Normal file
28
src/main/kotlin/drills/drill06/exercise1/point1/Receiver.kt
Normal file
@ -0,0 +1,28 @@
|
||||
package drills.drill06.exercise1.point1
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.QueueConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
|
||||
val connection = factory.createQueueConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createQueueSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val queue = session.createQueue("hello")
|
||||
val receiver = session.createReceiver(queue)
|
||||
|
||||
val msg = receiver.receive()
|
||||
println((msg as TextMessage).text)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
25
src/main/kotlin/drills/drill06/exercise1/point1/Sender.kt
Normal file
25
src/main/kotlin/drills/drill06/exercise1/point1/Sender.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package drills.drill06.exercise1.point1
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.QueueConnectionFactory
|
||||
import javax.jms.Session
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
val connection = factory.createQueueConnection()
|
||||
|
||||
val session = connection.createQueueSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val queue = session.createQueue("hello")
|
||||
val sender = session.createSender(queue)
|
||||
|
||||
val msg = session.createTextMessage("Hello Home!")
|
||||
sender.send(msg)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
28
src/main/kotlin/drills/drill06/exercise1/point2/Receiver.kt
Normal file
28
src/main/kotlin/drills/drill06/exercise1/point2/Receiver.kt
Normal file
@ -0,0 +1,28 @@
|
||||
package drills.drill06.exercise1.point2
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.QueueConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
|
||||
val connection = factory.createQueueConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createQueueSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val queue = session.createQueue("hello")
|
||||
val receiver = session.createReceiver(queue)
|
||||
|
||||
receiver.setMessageListener {
|
||||
println((it as TextMessage).text)
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
||||
}
|
25
src/main/kotlin/drills/drill06/exercise1/point2/Sender.kt
Normal file
25
src/main/kotlin/drills/drill06/exercise1/point2/Sender.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package drills.drill06.exercise1.point2
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.QueueConnectionFactory
|
||||
import javax.jms.Session
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
val connection = factory.createQueueConnection()
|
||||
|
||||
val session = connection.createQueueSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val queue = session.createQueue("hello")
|
||||
val sender = session.createSender(queue)
|
||||
|
||||
val msg = session.createTextMessage("Hello Home!")
|
||||
sender.send(msg)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
25
src/main/kotlin/drills/drill06/exercise1/point3/Publisher.kt
Normal file
25
src/main/kotlin/drills/drill06/exercise1/point3/Publisher.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package drills.drill06.exercise1.point3
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
val connection = factory.createTopicConnection()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic("hello")
|
||||
val publisher = session.createPublisher(topic)
|
||||
|
||||
val msg = session.createTextMessage("Hello Home!")
|
||||
publisher.publish(msg)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package drills.drill06.exercise1.point3
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
|
||||
val connection = factory.createTopicConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic("hello")
|
||||
val subscriber = session.createSubscriber(topic)
|
||||
|
||||
val msg = subscriber.receive()
|
||||
println((msg as TextMessage).text)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
25
src/main/kotlin/drills/drill06/exercise1/point4/Publisher.kt
Normal file
25
src/main/kotlin/drills/drill06/exercise1/point4/Publisher.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package drills.drill06.exercise1.point4
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
val connection = factory.createTopicConnection()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic("hello")
|
||||
val publisher = session.createPublisher(topic)
|
||||
|
||||
val msg = session.createTextMessage("Hello Home!")
|
||||
publisher.publish(msg)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package drills.drill06.exercise1.point4
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
|
||||
val connection = factory.createTopicConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic("hello")
|
||||
val subscriber = session.createSubscriber(topic)
|
||||
|
||||
subscriber.setMessageListener {
|
||||
println((it as TextMessage).text)
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
||||
}
|
25
src/main/kotlin/drills/drill06/exercise1/point5/Publisher.kt
Normal file
25
src/main/kotlin/drills/drill06/exercise1/point5/Publisher.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package drills.drill06.exercise1.point5
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
val connection = factory.createTopicConnection()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic("hello")
|
||||
val publisher = session.createPublisher(topic)
|
||||
|
||||
val msg = session.createTextMessage("Hello Home!")
|
||||
publisher.publish(msg)
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package drills.drill06.exercise1.point5
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val url = "tcp://localhost:61616"
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(url)
|
||||
|
||||
val connection = factory.createTopicConnection()
|
||||
connection.clientID = "client1"
|
||||
connection.start()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic("hello")
|
||||
val subscriber = session.createDurableSubscriber(topic, "s1")
|
||||
|
||||
subscriber.setMessageListener {
|
||||
println((it as TextMessage).text)
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
||||
}
|
38
src/main/kotlin/drills/drill06/exercise2/ChatClient.kt
Normal file
38
src/main/kotlin/drills/drill06/exercise2/ChatClient.kt
Normal file
@ -0,0 +1,38 @@
|
||||
package drills.drill06.exercise2
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory()
|
||||
|
||||
val connection = factory.createTopicConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
val room = session.createTopic("movies")
|
||||
|
||||
val publisher = session.createPublisher(room)
|
||||
val subscriber = session.createSubscriber(room)
|
||||
|
||||
subscriber.setMessageListener {
|
||||
println("peer: ${(it as TextMessage).text}")
|
||||
}
|
||||
|
||||
var line = readLine()
|
||||
val msg = session.createTextMessage()
|
||||
|
||||
while (line != ".") {
|
||||
msg.text = line
|
||||
publisher.publish(msg)
|
||||
line = readLine()
|
||||
}
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
41
src/main/kotlin/drills/drill06/exercise3/ChatClient.kt
Normal file
41
src/main/kotlin/drills/drill06/exercise3/ChatClient.kt
Normal file
@ -0,0 +1,41 @@
|
||||
package drills.drill06.exercise3
|
||||
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TextMessage
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
fun main() {
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory()
|
||||
|
||||
val connection = factory.createTopicConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
val room = session.createTopic("movies")
|
||||
|
||||
val publisher = session.createPublisher(room)
|
||||
|
||||
val selector = "Subtopic = 'Dark Comedy'"
|
||||
val subscriber = session.createSubscriber(room, selector, true)
|
||||
|
||||
subscriber.setMessageListener {
|
||||
println("peer: ${(it as TextMessage).text}")
|
||||
}
|
||||
|
||||
var line = readLine()
|
||||
val msg = session.createTextMessage()
|
||||
|
||||
while (line != ".") {
|
||||
msg.text = line
|
||||
msg.setStringProperty("Subtopic", "Dark Comedy")
|
||||
publisher.publish(msg)
|
||||
line = readLine()
|
||||
}
|
||||
|
||||
session.close()
|
||||
connection.close()
|
||||
}
|
7
src/main/kotlin/drills/drill06/exercise4/SensorNet.kt
Normal file
7
src/main/kotlin/drills/drill06/exercise4/SensorNet.kt
Normal file
@ -0,0 +1,7 @@
|
||||
package drills.drill06.exercise4
|
||||
|
||||
object SensorNet {
|
||||
const val TOPIC = "sensorNet"
|
||||
const val URI = "tcp://localhost:61616"
|
||||
const val PROPERTY = "temperature"
|
||||
}
|
28
src/main/kotlin/drills/drill06/exercise4/actuator/Action.kt
Normal file
28
src/main/kotlin/drills/drill06/exercise4/actuator/Action.kt
Normal file
@ -0,0 +1,28 @@
|
||||
package drills.drill06.exercise4.actuator
|
||||
|
||||
interface Action {
|
||||
enum class State {
|
||||
ON, OFF
|
||||
}
|
||||
|
||||
fun getActionName(): String
|
||||
fun getState(): State
|
||||
fun on()
|
||||
fun off()
|
||||
}
|
||||
|
||||
abstract class VirtualAction : Action {
|
||||
private var state = Action.State.OFF
|
||||
|
||||
override fun getState(): Action.State = state
|
||||
|
||||
override fun off() {
|
||||
println("Switching off: ${getActionName()}")
|
||||
state = Action.State.OFF
|
||||
}
|
||||
|
||||
override fun on() {
|
||||
println("Switching on: ${getActionName()}")
|
||||
state = Action.State.ON
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package drills.drill06.exercise4.actuator
|
||||
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class Actuator(private val action: Action) : Thread() {
|
||||
var latch = CountDownLatch(1)
|
||||
|
||||
override fun run() {
|
||||
while (true) {
|
||||
latch.await()
|
||||
|
||||
synchronized(this) {
|
||||
latch = CountDownLatch(1)
|
||||
}
|
||||
|
||||
if (action.getState() == Action.State.OFF)
|
||||
action.on()
|
||||
|
||||
latch.await(2050, TimeUnit.MILLISECONDS)
|
||||
|
||||
synchronized(this) {
|
||||
if (latch.count == 1L)
|
||||
action.off()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun actuate() {
|
||||
latch.countDown()
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package drills.drill06.exercise4.actuator
|
||||
|
||||
import drills.drill06.exercise4.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureActuatorNode(
|
||||
SensorNet.URI,
|
||||
"anti-frost",
|
||||
SensorNet.TOPIC,
|
||||
"<= 4"
|
||||
).start()
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package drills.drill06.exercise4.actuator
|
||||
|
||||
import drills.drill06.exercise4.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureActuatorNode(
|
||||
SensorNet.URI,
|
||||
"irrigation",
|
||||
SensorNet.TOPIC,
|
||||
">= 20"
|
||||
).start()
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
21
src/main/kotlin/drills/drill06/exercise4/sensor/Sampler.kt
Normal file
21
src/main/kotlin/drills/drill06/exercise4/sensor/Sampler.kt
Normal file
@ -0,0 +1,21 @@
|
||||
package drills.drill06.exercise4.sensor
|
||||
|
||||
import kotlin.random.Random
|
||||
|
||||
interface Sampler<T> {
|
||||
fun getSample(): T
|
||||
}
|
||||
|
||||
class SampleGenerator(seed: Int = 0) : Sampler<Double> {
|
||||
private val samples = listOf(
|
||||
6, 4, 3, 2, 4, 10, 18, 20, 22, 24, 20, 15, 10, 7
|
||||
)
|
||||
|
||||
private val random = Random(seed)
|
||||
|
||||
private var i = 0
|
||||
|
||||
override fun getSample(): Double {
|
||||
return samples[i++ % samples.size].toDouble() + random.nextDouble(-1.5, 1.5)
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package drills.drill06.exercise4.sensor
|
||||
|
||||
import drills.drill06.exercise4.SensorNet
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
class TemperatureSensorNode(val id: Int, val uri: String, val topicName: String) {
|
||||
private val sampler: Sampler<Double> =
|
||||
SampleGenerator(id)
|
||||
|
||||
fun start() {
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(uri)
|
||||
val connection = factory.createTopicConnection()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topic = session.createTopic(topicName)
|
||||
val publisher = session.createPublisher(topic)
|
||||
|
||||
val msg = session.createMessage()
|
||||
|
||||
while (true) {
|
||||
val sample = sampler.getSample()
|
||||
msg.setDoubleProperty(SensorNet.PROPERTY, sample)
|
||||
publisher.publish(msg)
|
||||
|
||||
println("Sensor-$id: $sample")
|
||||
|
||||
Thread.sleep(2000)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun main() {
|
||||
TemperatureSensorNode(
|
||||
0,
|
||||
SensorNet.URI,
|
||||
SensorNet.TOPIC
|
||||
).start()
|
||||
}
|
8
src/main/kotlin/drills/drill06/exercise5/SensorNet.kt
Normal file
8
src/main/kotlin/drills/drill06/exercise5/SensorNet.kt
Normal file
@ -0,0 +1,8 @@
|
||||
package drills.drill06.exercise5
|
||||
|
||||
object SensorNet {
|
||||
const val TOPIC_SENSOR = "sensor"
|
||||
const val TOPIC_ACTUATOR = "actuator"
|
||||
const val URI = "tcp://localhost:61616"
|
||||
const val PROPERTY = "temperature"
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package drills.drill06.exercise5.actuator
|
||||
|
||||
import drills.drill06.exercise4.actuator.TemperatureActuatorNode
|
||||
import drills.drill06.exercise5.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureActuatorNode(
|
||||
SensorNet.URI,
|
||||
"anti-frost",
|
||||
SensorNet.TOPIC_ACTUATOR,
|
||||
"<= 4"
|
||||
).start()
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package drills.drill06.exercise5.actuator
|
||||
|
||||
import drills.drill06.exercise4.actuator.TemperatureActuatorNode
|
||||
import drills.drill06.exercise5.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureActuatorNode(
|
||||
SensorNet.URI,
|
||||
"irrigation",
|
||||
SensorNet.TOPIC_ACTUATOR,
|
||||
">= 20"
|
||||
).start()
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package drills.drill06.exercise5.middleware
|
||||
|
||||
import drills.drill06.exercise5.SensorNet
|
||||
import org.apache.activemq.ActiveMQConnectionFactory
|
||||
import javax.jms.Session
|
||||
import javax.jms.TopicConnectionFactory
|
||||
|
||||
class MeanNode(
|
||||
private val uri: String,
|
||||
private val topicNameSensor: String,
|
||||
private val topicNameActuator: String
|
||||
) {
|
||||
fun start() {
|
||||
val factory: TopicConnectionFactory = ActiveMQConnectionFactory(uri)
|
||||
val connection = factory.createTopicConnection()
|
||||
connection.start()
|
||||
|
||||
val session = connection.createTopicSession(
|
||||
false,
|
||||
Session.AUTO_ACKNOWLEDGE
|
||||
)
|
||||
|
||||
val topicSensor = session.createTopic(topicNameSensor)
|
||||
val topicActuator = session.createTopic(topicNameActuator)
|
||||
|
||||
val subscriber = session.createSubscriber(topicSensor)
|
||||
val publisher = session.createPublisher(topicActuator)
|
||||
|
||||
val samples = mutableListOf<Double>()
|
||||
val msg = session.createMessage()
|
||||
|
||||
while (true) {
|
||||
val receiveMsg = subscriber.receiveNoWait()
|
||||
|
||||
if (receiveMsg != null) {
|
||||
val sample = receiveMsg.getDoubleProperty("temperature")
|
||||
samples.add(sample)
|
||||
println("sample: $sample")
|
||||
continue
|
||||
}
|
||||
|
||||
if (samples.isNotEmpty()) {
|
||||
val mean = samples.sum() / samples.size
|
||||
samples.clear()
|
||||
msg.setDoubleProperty("temperature", mean)
|
||||
publisher.publish(msg)
|
||||
println("MEAN: $mean")
|
||||
println("-------------------------")
|
||||
}
|
||||
|
||||
Thread.sleep(2000)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun main() {
|
||||
MeanNode(
|
||||
SensorNet.URI,
|
||||
SensorNet.TOPIC_SENSOR,
|
||||
SensorNet.TOPIC_ACTUATOR
|
||||
).start()
|
||||
}
|
12
src/main/kotlin/drills/drill06/exercise5/sensor/Sensor0.kt
Normal file
12
src/main/kotlin/drills/drill06/exercise5/sensor/Sensor0.kt
Normal file
@ -0,0 +1,12 @@
|
||||
package drills.drill06.exercise5.sensor
|
||||
|
||||
import drills.drill06.exercise4.sensor.TemperatureSensorNode
|
||||
import drills.drill06.exercise5.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureSensorNode(
|
||||
0,
|
||||
SensorNet.URI,
|
||||
SensorNet.TOPIC_SENSOR
|
||||
).start()
|
||||
}
|
12
src/main/kotlin/drills/drill06/exercise5/sensor/Sensor1.kt
Normal file
12
src/main/kotlin/drills/drill06/exercise5/sensor/Sensor1.kt
Normal file
@ -0,0 +1,12 @@
|
||||
package drills.drill06.exercise5.sensor
|
||||
|
||||
import drills.drill06.exercise4.sensor.TemperatureSensorNode
|
||||
import drills.drill06.exercise5.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureSensorNode(
|
||||
1,
|
||||
SensorNet.URI,
|
||||
SensorNet.TOPIC_SENSOR
|
||||
).start()
|
||||
}
|
12
src/main/kotlin/drills/drill06/exercise5/sensor/Sensor2.kt
Normal file
12
src/main/kotlin/drills/drill06/exercise5/sensor/Sensor2.kt
Normal file
@ -0,0 +1,12 @@
|
||||
package drills.drill06.exercise5.sensor
|
||||
|
||||
import drills.drill06.exercise4.sensor.TemperatureSensorNode
|
||||
import drills.drill06.exercise5.SensorNet
|
||||
|
||||
fun main() {
|
||||
TemperatureSensorNode(
|
||||
2,
|
||||
SensorNet.URI,
|
||||
SensorNet.TOPIC_SENSOR
|
||||
).start()
|
||||
}
|
Loading…
Reference in New Issue
Block a user