Implement 'kill'

This commit is contained in:
Stein Magnus Jodal 2009-12-24 03:10:32 +01:00
parent d4399b43de
commit 9dcb2dcbfa
4 changed files with 23 additions and 7 deletions

View File

@ -1,5 +1,6 @@
import logging
import re
import sys
from mopidy import settings
from mopidy.backends.dummy_backend import DummyBackend
@ -55,7 +56,7 @@ class MpdHandler(object):
@register(r'^close$')
def _close(self):
self.session.close_when_done()
self.session.do_close()
@register(r'^consume (?P<state>[01])$')
def _consume(self, state):
@ -88,7 +89,7 @@ class MpdHandler(object):
@register(r'^kill$')
def _kill(self):
pass # TODO
self.session.do_kill()
@register(r'^listplaylist (?P<name>.+)$')
def _listplaylist(self, name):

View File

@ -1,6 +1,7 @@
import asyncore
import logging
import socket
import sys
from mopidy import settings
from mopidy.session import MpdSession
@ -19,7 +20,13 @@ class MpdServer(asyncore.dispatcher):
def handle_accept(self):
(client_socket, client_address) = self.accept()
logger.info(u'Connection from: [%s]:%s', *client_address)
self.handler_class(client_socket, client_address)
self.handler_class(self, client_socket, client_address)
def handle_close(self):
self.close()
def do_kill(self):
logger.info('Received "kill". Shutting down.')
self.handle_close()
sys.exit(0)

View File

@ -7,17 +7,22 @@ from mopidy.handler import MpdHandler
logger = logging.getLogger(u'session')
class MpdSession(asynchat.async_chat):
def __init__(self, client_socket, client_address, handler=MpdHandler):
def __init__(self, server, client_socket, client_address,
handler=MpdHandler):
asynchat.async_chat.__init__(self, sock=client_socket)
self.server = server
self.client_address = client_address
self.input_buffer = []
self.set_terminator(settings.MPD_LINE_TERMINATOR)
self.handler = handler(session=self)
self.send_response(u'OK MPD %s' % get_mpd_version())
def close_when_done(self):
def do_close(self):
logger.info(u'Closing connection with [%s]:%s', *self.client_address)
asynchat.async_chat.close_when_done(self)
self.close_when_done()
def do_kill(self):
self.server.do_kill()
def collect_incoming_data(self, data):
self.input_buffer.append(data)

View File

@ -419,7 +419,10 @@ class StickersHandlerTest(unittest.TestCase):
class DummySession(object):
def close_when_done(self):
def do_close(self):
pass
def do_kill(self):
pass