Tinkering with /ws

This commit is contained in:
James Barnsley
2017-02-16 19:51:49 +13:00
parent 58037c8c36
commit b53ba2ca6d
5 changed files with 25 additions and 31 deletions

View File

@ -5,7 +5,8 @@ import tornado.web
import tornado.websocket
from mopidy import config, ext
from frontend import IrisFrontend
from http import RequestHandler
from http import HttpHandler
from websocket import WebsocketHandler
logger = logging.getLogger(__name__)
__version__ = '2.12.1'
@ -52,10 +53,15 @@ def factory(config, core):
(r"/images/(.*)", tornado.web.StaticFileHandler, {
"path": config['local-images']['image_dir']
}),
(r'/http/([^/]*)', RequestHandler, {
(r'/http/([^/]*)', HttpHandler, {
'core': core,
'frontend': IrisFrontend,
'config': config
}),
(r'/ws/?', WebsocketHandler, {
'core': core,
'frontend': IrisFrontend
}),
(r'/(.*)', tornado.web.StaticFileHandler, {
"path": path,
"default_filename": "index.html"

View File

@ -1,6 +1,6 @@
from __future__ import unicode_literals
import logging, json, pykka, pylast, pusher, urllib, urllib2, os, sys, mopidy_iris, subprocess
import logging, json, pykka, pylast, urllib, urllib2, os, sys, mopidy_iris, subprocess
import tornado.web
import tornado.websocket
import tornado.ioloop
@ -8,6 +8,7 @@ from mopidy import config, ext
from mopidy.core import CoreListener
from pkg_resources import parse_version
from spotipy import Spotify
from websocket import WebsocketHandler
# import logger
logger = logging.getLogger(__name__)
@ -35,23 +36,8 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
"seed_tracks": []
}
def on_start(self):
def on_start(self):
logger.info('Starting Iris '+self.version)
# try and start a pusher server
port = str(self.config['iris']['pusherport'])
try:
self.pusher = tornado.web.Application([( '/pusher', pusher.PusherWebsocketHandler, { 'frontend': self } )])
self.pusher.listen(port)
logger.info('Pusher server running at [0.0.0.0]:'+port)
except( pylast.NetworkError, pylast.MalformedResponseError, pylast.WSError ) as e:
logger.error('Error starting Pusher: %s', e)
self.stop()
# get a fresh spotify authentication token and store for future use
# self.refresh_spotify_token()
##
@ -102,7 +88,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
self.load_more_tracks()
except RuntimeError:
pusher.broadcast('error', {'source': 'check_for_radio_update', 'message': 'Could not fetch tracklist length'})
WebsocketHandler.broadcast('error', {'source': 'check_for_radio_update', 'message': 'Could not fetch tracklist length'})
logger.warning('IrisFrontend: Could not fetch tracklist length')
pass
@ -123,7 +109,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
token = token['access_token']
except:
logger.error('IrisFrontend: access_token missing or invalid')
pusher.broadcast('error', {'source': 'load_more_tracks', 'message': 'access_token missing or invalid'})
WebsocketHandler.broadcast('error', {'source': 'load_more_tracks', 'message': 'access_token missing or invalid'})
try:
spotify = Spotify( auth = token )
@ -161,7 +147,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
self.core.playback.play()
# notify clients
pusher.broadcast('radio', { 'radio': self.radio })
WebsocketHandler.broadcast('radio', { 'radio': self.radio })
# return new radio state to initial call
return self.radio
@ -183,7 +169,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
self.core.playback.stop()
# notify clients
pusher.broadcast( 'radio', { 'radio': self.radio })
WebsocketHandler.broadcast( 'radio', { 'radio': self.radio })
# return new radio state to initial call
return self.radio
@ -212,7 +198,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
self.queue_metadata['tlid_'+str(tlid)] = item
# broadcast to all clients
pusher.broadcast('queue_metadata', {'queue_metadata': self.queue_metadata})
WebsocketHandler.broadcast('queue_metadata', {'queue_metadata': self.queue_metadata})
return self.queue_metadata
@ -232,7 +218,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
self.queue_metadata = cleaned_queue_metadata
# broadcast to all clients
pusher.broadcast('queue_metadata', {'queue_metadata': self.queue_metadata})
WebsocketHandler.broadcast('queue_metadata', {'queue_metadata': self.queue_metadata})
##

View File

@ -7,12 +7,13 @@ from spotipy import Spotify
# import logger
logger = logging.getLogger(__name__)
class RequestHandler(tornado.web.RequestHandler):
class HttpHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header("Access-Control-Allow-Origin", "*")
def initialize(self, core, config):
def initialize(self, frontend, core, config):
self.frontend = frontend
self.core = core
self.config = config

View File

@ -76,9 +76,10 @@ def digest_protocol( protocol ):
# This is the actual websocket thread that accepts, digests and emits messages.
# TODO: Figure out how to merge this into the main Mopidy websocket to avoid needing two websocket servers
##
class PusherWebsocketHandler(tornado.websocket.WebSocketHandler):
class WebsocketHandler(tornado.websocket.WebSocketHandler):
def initialize(self, frontend):
def initialize(self, core, frontend):
self.core = core
self.frontend = frontend
def check_origin(self, origin):

View File

@ -95,9 +95,9 @@ const PusherMiddleware = (function(){
username: Math.random().toString(36).substr(2, 9)
}
if( state.pusher.username ) connection.username = state.pusher.username;
socket = new WebSocket(
'ws://'+state.mopidy.host+':'+state.pusher.port+'/pusher',
'ws://'+state.mopidy.host+':'+state.mopidy.port+'/iris/ws',
[ connection.clientid, connection.connectionid, connection.username ]
);