Как создать фабрику AngularJS для HTML5 WebSockets?
Мой сервер обслуживает подключения к веб-сокетам по нескольким путям следующим образом:
ws://192.168.225.59:8080/chat/
ws://192.168.225.59:8080/notif/
ws://192.168.225.59:8080/something/
Я хотел бы иметь фабрику <b>Socket</b>
, котораяможет принять любой путь из вышеупомянутого и открыть соединение через веб-сокет.
Мой подход:
socket.service.js
angular.
module('core.socket').
factory('Socket', [function() {
var stack = [];
var onmessageDefer;
var self = this;
var socket = {
ws: new WebSocket("ws://192.168.225.59:8080/"),
send: function(data) {
data = JSON.stringify(data);
if (socket.ws.readyState == 1) {
socket.ws.send(data);
} else {
stack.push(data);
}
},
onmessage: function(callback) {
if (socket.ws.readyState == 1) {
socket.ws.onmessage = callback;
} else {
onmessageDefer = callback;
}
}
};
socket.init = function(url){
socket.ws.close();
socket.ws = new WebSocket(url);
}
socket.ws.onopen = function(event) {
for (i in stack) {
socket.ws.send(stack[i]);
}
stack = [];
if (onmessageDefer) {
socket.ws.onmessage = onmessageDefer;
onmessageDefer = null;
}
};
return socket;
}]);
Здесь я бы позвонил Socket.init("ws://192.168.225.59:8080/something/")
из моего контроллера, который отключается от существующего соединения и устанавливает это новое соединение.Но этот подход каким-то образом блокирует получение сообщений.
Любая помощь?