Tinkering with /ws
This commit is contained in:
@ -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"
|
||||
|
||||
@ -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})
|
||||
|
||||
|
||||
##
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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):
|
||||
@ -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 ]
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user