Skip to content

Commit c892ebc

Browse files
committed
listen to socket
1 parent 9898ac2 commit c892ebc

File tree

1 file changed

+58
-0
lines changed
  • services/static-webserver/client/source/class/osparc/data/model

1 file changed

+58
-0
lines changed

services/static-webserver/client/source/class/osparc/data/model/Conversation.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ qx.Class.define("osparc.data.model.Conversation", {
4141

4242
this.__messages = [];
4343
this.__fetchLastMessage();
44+
45+
this.__listenToConversationMessageWS();
4446
},
4547

4648
statics: {
@@ -132,6 +134,12 @@ qx.Class.define("osparc.data.model.Conversation", {
132134
},
133135
},
134136

137+
events: {
138+
"messageAdded": "qx.event.type.Data",
139+
"messageUpdated": "qx.event.type.Data",
140+
"messageDeleted": "qx.event.type.Data",
141+
},
142+
135143
members: {
136144
__fetchLastMessagePromise: null,
137145
__nextRequestParams: null,
@@ -150,6 +158,35 @@ qx.Class.define("osparc.data.model.Conversation", {
150158
}
151159
},
152160

161+
__listenToConversationMessageWS: function() {
162+
[
163+
this.self().CHANNELS.CONVERSATION_MESSAGE_CREATED,
164+
this.self().CHANNELS.CONVERSATION_MESSAGE_UPDATED,
165+
this.self().CHANNELS.CONVERSATION_MESSAGE_DELETED,
166+
].forEach(eventName => {
167+
const eventHandler = message => {
168+
if (message) {
169+
const conversationId = message["conversationId"];
170+
if (conversationId === this.getConversationId()) {
171+
switch (eventName) {
172+
case osparc.data.model.Conversation.CHANNELS.CONVERSATION_MESSAGE_CREATED:
173+
this.addMessage(message);
174+
break;
175+
case osparc.data.model.Conversation.CHANNELS.CONVERSATION_MESSAGE_UPDATED:
176+
this.updateMessage(message);
177+
break;
178+
case osparc.data.model.Conversation.CHANNELS.CONVERSATION_MESSAGE_DELETED:
179+
this.deleteMessage(message);
180+
break;
181+
}
182+
}
183+
}
184+
};
185+
socket.on(eventName, eventHandler, this);
186+
this.__wsHandlers.push({ eventName, handler: eventHandler });
187+
});
188+
},
189+
153190
__fetchLastMessage: function() {
154191
if (this.__fetchLastMessagePromise) {
155192
return this.__fetchLastMessagePromise;
@@ -212,13 +249,34 @@ qx.Class.define("osparc.data.model.Conversation", {
212249
const found = this.__messages.find(msg => msg["messageId"] === message["messageId"]);
213250
if (!found) {
214251
this.__messages.push(message);
252+
this.fireDataEvent("messageAdded", message);
215253
}
216254
// latest first
217255
this.__messages.sort((a, b) => new Date(b.created) - new Date(a.created));
218256
this.setLastMessage(this.__messages[0]);
219257
}
220258
},
221259

260+
updateMessage: function(message) {
261+
if (message) {
262+
const found = this.__messages.find(msg => msg["messageId"] === message["messageId"]);
263+
if (found) {
264+
Object.assign(found, message);
265+
this.fireDataEvent("messageUpdated", found);
266+
}
267+
}
268+
},
269+
270+
deleteMessage: function(message) {
271+
if (message) {
272+
const found = this.__messages.find(msg => msg["messageId"] === message["messageId"]);
273+
if (found) {
274+
this.__messages.remove(found);
275+
this.fireDataEvent("messageDeleted", found);
276+
}
277+
}
278+
},
279+
222280
getContextProjectId: function() {
223281
if (this.getExtraContext() && "projectId" in this.getExtraContext()) {
224282
return this.getExtraContext()["projectId"];

0 commit comments

Comments
 (0)