1+ package ai.ancf.lmos.wot.binding.websocket
2+
3+ import ai.ancf.lmos.wot.thing.schema.DataSchemaValue
4+ import com.fasterxml.jackson.annotation.JsonIgnoreProperties
5+ import com.fasterxml.jackson.annotation.JsonSubTypes
6+ import com.fasterxml.jackson.annotation.JsonTypeInfo
7+ import com.fasterxml.jackson.databind.JsonNode
8+ import java.time.Instant
9+
10+ // Base class for all message types
11+ @JsonIgnoreProperties(ignoreUnknown = true )
12+ @JsonTypeInfo(
13+ use = JsonTypeInfo .Id .NAME ,
14+ include = JsonTypeInfo .As .PROPERTY ,
15+ property = " messageType"
16+ )
17+ @JsonSubTypes(
18+ JsonSubTypes .Type (value = ReadPropertyMessage ::class , name = " readProperty" ),
19+ JsonSubTypes .Type (value = WritePropertyMessage ::class , name = " writeProperty" ),
20+ JsonSubTypes .Type (value = ObservePropertyMessage ::class , name = " observeProperty" ),
21+ JsonSubTypes .Type (value = UnobservePropertyMessage ::class , name = " unobserveProperty" ),
22+ JsonSubTypes .Type (value = ReadAllPropertiesMessage ::class , name = " readAllProperties" ),
23+ JsonSubTypes .Type (value = WriteAllPropertiesMessage ::class , name = " writeAllProperties" ),
24+ JsonSubTypes .Type (value = ReadMultiplePropertiesMessage ::class , name = " readMultipleProperties" ),
25+ JsonSubTypes .Type (value = WriteMultiplePropertiesMessage ::class , name = " writeMultipleProperties" ),
26+ JsonSubTypes .Type (value = PropertyReadingMessage ::class , name = " propertyReading" ),
27+ JsonSubTypes .Type (value = PropertyReadingsMessage ::class , name = " propertyReadings" ),
28+ JsonSubTypes .Type (value = InvokeActionMessage ::class , name = " invokeAction" ),
29+ JsonSubTypes .Type (value = ActionStatusMessage ::class , name = " actionStatus" ),
30+ JsonSubTypes .Type (value = ActionStatusesMessage ::class , name = " actionStatuses" ),
31+ JsonSubTypes .Type (value = SubscribeEventMessage ::class , name = " subscribeevent" ),
32+ JsonSubTypes .Type (value = UnsubscribeEventMessage ::class , name = " unsubscribeEvent" ),
33+ JsonSubTypes .Type (value = EventMessage ::class , name = " event" ),
34+ JsonSubTypes .Type (value = ErrorMessage ::class , name = " error" )
35+ )
36+ sealed interface WoTMessage {
37+ var thingId: String
38+ var messageType: String
39+ }
40+
41+ data class InvokeActionMessage (
42+ override var thingId : String ,
43+ var action : String ,
44+ var input : DataSchemaValue ? = null
45+ ) : WoTMessage {
46+ override var messageType: String = " invokeAction"
47+ }
48+
49+ // Subclass for subscribeEvent message
50+ data class SubscribeEventMessage (
51+ override var thingId : String ,
52+ var event : String ,
53+ var lastEvent : Instant
54+ ) : WoTMessage {
55+ override var messageType: String = " subscribeevent"
56+ }
57+
58+ // Subclass for unsubscribeEvent message
59+ data class UnsubscribeEventMessage (
60+ override var thingId : String ,
61+ var event : String
62+ ) : WoTMessage {
63+ override var messageType: String = " unsubscribeEvent"
64+ }
65+
66+ // Subclass for event message
67+ data class EventMessage (
68+ override var thingId : String ,
69+ var event : String ,
70+ var href : String ,
71+ var data : DataSchemaValue ,
72+ var timestamp : Instant = Instant .now()
73+ ) : WoTMessage {
74+ override var messageType: String = " event"
75+ }
76+
77+ // Subclass for readProperty message
78+ data class ReadPropertyMessage (
79+ override var thingId : String ,
80+ var property : String
81+ ) : WoTMessage {
82+ override var messageType: String = " readProperty"
83+ }
84+
85+ // Subclass for writeProperty message
86+ data class WritePropertyMessage (
87+ override var thingId : String ,
88+ var property : String ,
89+ var data : DataSchemaValue
90+ ) : WoTMessage {
91+ override var messageType: String = " writeProperty"
92+ }
93+
94+ // Subclass for observeAllProperties message
95+ data class ObserveAllPropertiesMessage (
96+ override var thingId : String ,
97+ var lastPropertyReading : Instant
98+ ) : WoTMessage {
99+ override var messageType: String = " observeAllProperties"
100+ }
101+
102+ // Subclass for observeProperty message
103+ data class ObservePropertyMessage (
104+ override var thingId : String ,
105+ var property : String ,
106+ var lastPropertyReading : Instant
107+ ) : WoTMessage {
108+ override var messageType: String = " observeProperty"
109+ }
110+
111+ // Subclass for unobserveProperty message
112+ data class UnobservePropertyMessage (
113+ override var thingId : String ,
114+ var property : String
115+ ) : WoTMessage {
116+ override var messageType: String = " unobserveProperty"
117+ }
118+
119+ // Subclass for readAllProperties message
120+ data class ReadAllPropertiesMessage (
121+ override var thingId : String
122+ ) : WoTMessage {
123+ override var messageType: String = " readAllProperties"
124+ }
125+
126+ // Subclass for writeAllProperties message
127+ data class WriteAllPropertiesMessage (
128+ override var thingId : String ,
129+ var data : Map <String , DataSchemaValue >
130+ ) : WoTMessage {
131+ override var messageType: String = " writeAllProperties"
132+ }
133+
134+ // Subclass for readMultipleProperties message
135+ data class ReadMultiplePropertiesMessage (
136+ override var thingId : String ,
137+ var properties : List <String >
138+ ) : WoTMessage {
139+ override var messageType: String = " readMultipleProperties"
140+ }
141+
142+ // Subclass for writeMultipleProperties message
143+ data class WriteMultiplePropertiesMessage (
144+ override var thingId : String ,
145+ var data : Map <String , DataSchemaValue >
146+ ) : WoTMessage {
147+ override var messageType: String = " writeMultipleProperties"
148+ }
149+
150+ // Subclass for propertyReading message
151+ data class PropertyReadingMessage (
152+ override var thingId : String ,
153+ var property : String ,
154+ var data : JsonNode ,
155+ var timestamp : Instant = Instant .now()
156+ ) : WoTMessage {
157+ override var messageType: String = " propertyReading"
158+ }
159+
160+ // Subclass for propertyReadings message
161+ data class PropertyReadingsMessage (
162+ override var thingId : String ,
163+ var data : Map <String , DataSchemaValue >,
164+ var timestamp : Instant = Instant .now()
165+ ) : WoTMessage {
166+ override var messageType: String = " propertyReadings"
167+ }
168+
169+ // Subclass for error message
170+ data class ErrorMessage (
171+ override var thingId : String ,
172+ var type : String , // URI reference to the type of error
173+ var title : String , // Short, human-readable summary of the problem
174+ var status : String , // HTTP status code as a string
175+ var detail : String , // Detailed explanation of the error
176+ var instance : String // URI reference to the specific occurrence of the problem
177+ ) : WoTMessage {
178+ override var messageType: String = " error"
179+ }
180+
181+ // Subclass for actionStatus message
182+ data class ActionStatusMessage (
183+ override var thingId : String ,
184+ var action : String ,
185+ var status : String // Example: "pending", "completed", "failed", etc.
186+ ) : WoTMessage {
187+ override var messageType: String = " actionStatus"
188+ }
189+
190+ // Subclass for actionStatuses message
191+ data class ActionStatusesMessage (
192+ override var thingId : String ,
193+ var statuses : Map <String , String > // Map of action names to their statuses
194+ ) : WoTMessage {
195+ override var messageType: String = " actionStatuses"
196+ }
0 commit comments