2015-10-06 3 views
0

Я пытаюсь написать Угловой завод, который в основном открывает WebSocket, прислушиваются к соединениям и печатают сообщения, которые он получает от сервераВозможное фундаментальное непонимание того, как работают фабрики?

Я умысел моего завода так:

angular.module('zmApp.controllers') 
.factory('EventServer', 
[ '$websocket',function 
($websocket) { 

    function start() 
    { 

     console.log("*************FACTORY EVENT SERVER*************"); 
     var dataStream; 
     console.log ("FACTORY webSocketStart: attempting to start a WSS connection"); 

     dataStream =$websocket("wss://<server>:9000/"); 


     dataStream.onMessage = function(message) { 
      console.log("SERVICE GOT WEBSOCKET MESSAGE:" + message.data); 
     }; 


    return { 
     start:start 
    }; 
}]) 

Вот мои сомнения:

  • Как убедиться, что этот завод получает «Начало» и получает сообщения, как его предполагается независимо от того, какие приложения /контроллера зрения я нахожусь? Я предположил, что включив этот завод в index.html, он будет автоматически вызван. Не так. Даже если я вызываю EventServer.start() в app.run, я могу видеть инициализацию и подключение сокета, но я никогда не получаю обратный вызов onMessage.
  • Если я переименую «Factory» в «службу», он автоматически запускается, когда приложение работает, но , когда я перехожу на другой контроллер/просмотра прекращает прием сообщений (такие же, как завод)

Моя цель состоит в написании завод, который получает веб-сокетов сообщения. Вероятно, я запутался в том, как это сделать, и не делайте этого независимо от того, в каком состоянии/просматривается мое приложение.

И вот нечетная часть: если я запустил сетевой сокет с возможностью повторного подключения и I снимите сервер, я вижу, что веб-сокет пытается подключиться, поэтому я знаю, что объект соединения - dataStream не уничтожается.

Я знаю, что $ websocket работает, потому что, если я создаю веб-сокет внутри контроллера для представления, в котором я есть, он отлично работает и принимается onMessage.

Что я могу не получить, так это то, как это сделать в независимой фабрике просмотра.

Буду признателен за советы.

благодаря

ответ

0

Фабрики одноэлементны, то есть новый экземпляр будет создаваться каждый раз, когда вы впрыснуть его в контроллер или другой завод.

Звучит так, будто вы не вводите завод, где хотите его использовать. Контроллер вы хотите использовать его в должен выглядеть следующим образом:

angular 
.module('zmApp.controllers') 
.controller('YourController', ['EventServer', function(EventServer) { 
    EventServer.start // to access the method in your factory 
}]); 

Вы должны сделать это для каждого контроллера или фабрики вы хотите использовать EventServer в

+0

Я впрыскиванием.. Вот пример контроллера http://pastebin.com/UQYp4Cf9 -> фабрика onMessage никогда не вызывается. Интересно, что onMessage этого контроллера вызывает вызов даже при выходе из него! – user1361529

+0

Вы можете просто использовать службу '$ websocket' напрямую, если вы только вызываете методы этой службы. Это сервис, который можно вводить, когда вам нравится. Является ли создание фабрики 'EventServer' добавлением чего-либо другого к тому, что уже делает' $ websocket'? – br3w5

+0

Спасибо. Так что сейчас это заглушка. В будущем он расширится, и это подключение к веб-сокету будет независящим от состояния приложения. Следовательно, желание заставить фабрику работать. – user1361529

Смежные вопросы