diff --git a/src/services/ws.js b/src/services/ws.js new file mode 100644 index 0000000000000000000000000000000000000000..ebcd88602bbfae8a93be96ce55fdf563c2607936 --- /dev/null +++ b/src/services/ws.js @@ -0,0 +1,79 @@ +const Stomp = require("stompjs"); +const SockJS = new require("sockjs-client")(process.env.VUE_APP_BASEURL + "ws"); +import {parseCurrentUser} from "@/utils/token-utils"; + +// Create a Singleton function +// Events fired by websocket, MESSAGE +const ws = (function () { + + // Object of all injected functions that the client may want + const handlers = {}; + + const fire = function (event, data) { + if (handlers[event]) { + handlers[event](data) + } + }; + + const onMessageReceived = (payload) => { + const data = JSON.parse(payload.body); + + console.log("New message!") + // Fire message event + fire("MESSAGE", JSON.parse(payload.body)); + + if(data.status == "NEW_MESSAGE") fire("NEW_MESSAGE", JSON.parse(payload.body)); + + console.log("Received message: " + payload); + } + + const onConnected = () => { + + console.log("Websocket Connected"); + stompClient.subscribe( + "/user/" + parseCurrentUser().account_id + "/queue/messages", + onMessageReceived + ); + }; + + + const onError = () => { + + }; + + let stompClient = Stomp.over(SockJS); + + stompClient.connect({}, onConnected, onError); + + + + return { + on: function (event, callback) { + handlers[event] = callback; + }, + fire: fire, + isActive: function (event) { + return !!handlers[event]; + }, + end: function (event) { + if (handlers[event]) { + delete handlers[event]; + } else { + throw new Error("No handler for event: " + event); + } + }, + sendMessage: ({sender, recipient, status }) => { + if(status) console.log(status) + stompClient.send("/app/chat", {}, JSON.stringify({ + from: sender, + to: recipient, + id: null, + status: "NEW_MESSAGE" + })); + }, + test: true + } +})(); + + +export default ws; \ No newline at end of file