import Service from '@ember/service'; import { aliasMethod } from '@ember/object'; import $ from 'jquery'; export default Service.extend({ connect() { let me = this; if (me.get('connected')) { console.info('Websocket is connected, reconnect.'); me.disconnect(); } // connect if (!me.get('stompClient')) { me.set('stompClient', Stomp.over(new SockJS('/stomp'))); } me.get('stompClient').connect({}, function() { console.info('Connect websocket.'); me.stompClient.subscribe('/topic/websocket', function(msg) { console.info('On websocket message: ', msg); $.trigger('websocket', JSON.parse(msg.body)); }); me.set('connected', true); console.info('Websocket connected.'); }); }, willDestroy() { var me = this; me._super(...arguments); if (me.get('connected') && me.get('stompClient')) { me.get('stompClient').disconnect(); me.set('connected', false); console.info('Websocket disconnected.'); } else { console.info('Websocket is not connected, ignore disconnect.'); } }, disconnect: aliasMethod('willDestroy') });