Skip to content

Commit b07eb97

Browse files
author
Robert Winkler
committed
Enhanced WebSocketProtocolClient
1 parent e92abf0 commit b07eb97

File tree

10 files changed

+367
-135
lines changed

10 files changed

+367
-135
lines changed

kotlin-wot-binding-mqtt/src/test/kotlin/integration/MqttProtocolServerTest.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,11 @@ class MqttProtocolServerTest {
136136
}
137137
.send().await()
138138

139-
lock.await(2000, TimeUnit.MILLISECONDS);
139+
// Wait for the events to be handled, with a timeout.
140+
val completedInTime = lock.await(2000, TimeUnit.MILLISECONDS)
141+
142+
// Assert that the events were handled within the timeout period.
143+
assertTrue(completedInTime, "Expected events were not received within the timeout period.")
140144
}
141145

142146
@Test

kotlin-wot-binding-websocket/src/main/kotlin/websocket/Messages.kt

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ai.ancf.lmos.wot.binding.websocket
33
import com.fasterxml.jackson.annotation.*
44
import com.fasterxml.jackson.databind.JsonNode
55
import java.time.Instant
6+
import java.util.*
67

78
object MessageTypes {
89
const val READ_PROPERTY = "readProperty"
@@ -54,26 +55,31 @@ object MessageTypes {
5455
)
5556
sealed interface WoTMessage {
5657
var thingId: String
58+
var messageId : String
5759
@get:JsonIgnore // Ignore the type property in the interface itself
5860
val messageType: String
5961
}
6062

6163
class Acknowledgement(
6264
override var thingId: String,
65+
override var messageId : String = UUID.randomUUID().toString(),
66+
var correlationId : String? = null,
6367
var message: String
6468
) : WoTMessage {
6569
override val messageType: String = MessageTypes.ACKNOWLEDGEMENT
6670
}
6771

6872
data class ReadPropertyMessage(
6973
override var thingId: String,
74+
override var messageId : String = UUID.randomUUID().toString(),
7075
var property: String
7176
) : WoTMessage {
7277
override val messageType: String = MessageTypes.READ_PROPERTY
7378
}
7479

7580
data class WritePropertyMessage(
7681
override var thingId: String,
82+
override var messageId : String = UUID.randomUUID().toString(),
7783
var property: String,
7884
var data: JsonNode
7985
) : WoTMessage {
@@ -82,6 +88,7 @@ data class WritePropertyMessage(
8288

8389
data class ObservePropertyMessage(
8490
override var thingId: String,
91+
override var messageId : String = UUID.randomUUID().toString(),
8592
var property: String,
8693
var lastPropertyReading: Instant = Instant.now()
8794
) : WoTMessage {
@@ -90,40 +97,47 @@ data class ObservePropertyMessage(
9097

9198
data class UnobservePropertyMessage(
9299
override var thingId: String,
100+
override var messageId : String = UUID.randomUUID().toString(),
93101
var property: String
94102
) : WoTMessage {
95103
override val messageType: String = MessageTypes.UNOBSERVE_PROPERTY
96104
}
97105

98106
data class ReadAllPropertiesMessage(
99-
override var thingId: String
107+
override var thingId: String,
108+
override var messageId : String = UUID.randomUUID().toString(),
100109
) : WoTMessage {
101110
override val messageType: String = MessageTypes.READ_ALL_PROPERTIES
102111
}
103112

104113
data class WriteAllPropertiesMessage(
105114
override var thingId: String,
115+
override var messageId : String = UUID.randomUUID().toString(),
106116
var data: Map<String, JsonNode>
107117
) : WoTMessage {
108118
override val messageType: String = MessageTypes.WRITE_ALL_PROPERTIES
109119
}
110120

111121
data class ReadMultiplePropertiesMessage(
112122
override var thingId: String,
123+
override var messageId : String = UUID.randomUUID().toString(),
113124
var properties: List<String>
114125
) : WoTMessage {
115126
override val messageType: String = MessageTypes.READ_MULTIPLE_PROPERTIES
116127
}
117128

118129
data class WriteMultiplePropertiesMessage(
119130
override var thingId: String,
131+
override var messageId : String = UUID.randomUUID().toString(),
120132
var data: Map<String, JsonNode>
121133
) : WoTMessage {
122134
override val messageType: String = MessageTypes.WRITE_MULTIPLE_PROPERTIES
123135
}
124136

125137
data class PropertyReadingMessage(
126138
override var thingId: String,
139+
override var messageId : String = UUID.randomUUID().toString(),
140+
var correlationId : String? = null,
127141
var property: String,
128142
var data: JsonNode,
129143
var timestamp: Instant = Instant.now()
@@ -133,6 +147,8 @@ data class PropertyReadingMessage(
133147

134148
data class PropertyReadingsMessage(
135149
override var thingId: String,
150+
override var messageId : String = UUID.randomUUID().toString(),
151+
var correlationId : String? = null,
136152
var data: Map<String, JsonNode>,
137153
var timestamp: Instant = Instant.now()
138154
) : WoTMessage {
@@ -141,6 +157,7 @@ data class PropertyReadingsMessage(
141157

142158
data class InvokeActionMessage(
143159
override var thingId: String,
160+
override var messageId : String = UUID.randomUUID().toString(),
144161
var action: String,
145162
var input: JsonNode? = null
146163
) : WoTMessage {
@@ -158,6 +175,8 @@ enum class ActionStatus(val status: String) {
158175

159176
data class ActionStatusMessage(
160177
override var thingId: String,
178+
override var messageId : String = UUID.randomUUID().toString(),
179+
var correlationId : String? = null,
161180
var action: String,
162181
var status: ActionStatus = ActionStatus.COMPLETED, // Example: "pending", "completed", "failed"
163182
var output: JsonNode?
@@ -167,13 +186,16 @@ data class ActionStatusMessage(
167186

168187
data class ActionStatusesMessage(
169188
override var thingId: String,
189+
override var messageId : String = UUID.randomUUID().toString(),
190+
var correlationId : String? = null,
170191
var statuses: Map<String, String> // Map of action names to their statuses
171192
) : WoTMessage {
172193
override val messageType: String = MessageTypes.ACTION_STATUSES
173194
}
174195

175196
data class Subscription(
176197
override var thingId: String,
198+
override var messageId : String = UUID.randomUUID().toString(),
177199
var event: String,
178200
var lastEvent: Instant = Instant.now()
179201
) : WoTMessage {
@@ -182,6 +204,7 @@ data class Subscription(
182204

183205
data class SubscribeEventMessage(
184206
override var thingId: String,
207+
override var messageId : String = UUID.randomUUID().toString(),
185208
var event: String,
186209
var lastEvent: Instant = Instant.now()
187210
) : WoTMessage {
@@ -190,13 +213,16 @@ data class SubscribeEventMessage(
190213

191214
data class UnsubscribeEventMessage(
192215
override var thingId: String,
216+
override var messageId : String = UUID.randomUUID().toString(),
193217
var event: String
194218
) : WoTMessage {
195219
override val messageType: String = MessageTypes.UNSUBSCRIBE_EVENT
196220
}
197221

198222
data class EventMessage(
199223
override var thingId: String,
224+
override var messageId : String = UUID.randomUUID().toString(),
225+
var correlationId : String? = null,
200226
var event: String,
201227
var href: String? = null,
202228
var data: JsonNode,
@@ -207,6 +233,8 @@ data class EventMessage(
207233

208234
data class ErrorMessage(
209235
override var thingId: String,
236+
override var messageId : String = UUID.randomUUID().toString(),
237+
var correlationId : String? = null,
210238
var type: String, // URI reference to the type of error
211239
var title: String, // Short, human-readable summary of the problem
212240
var status: String, // HTTP status code as a string

0 commit comments

Comments
 (0)