diff --git a/mopidy/handler.py b/mopidy/handler.py index d1d7ae16..5b7f53df 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -20,7 +20,8 @@ def register(pattern): return decorator class MpdHandler(object): - def __init__(self, backend=DummyBackend): + def __init__(self, session=None, backend=DummyBackend): + self.session = session self.register_backend(backend()) def handle_request(self, request): @@ -54,7 +55,7 @@ class MpdHandler(object): @register(r'^close$') def _close(self): - pass # TODO + self.session.close_when_done() @register(r'^consume (?P[01])$') def _consume(self, state): diff --git a/mopidy/session.py b/mopidy/session.py index 331419f5..805d0d96 100644 --- a/mopidy/session.py +++ b/mopidy/session.py @@ -9,16 +9,21 @@ logger = logging.getLogger(u'session') class MpdSession(asynchat.async_chat): def __init__(self, client_socket, client_address, handler=MpdHandler): asynchat.async_chat.__init__(self, sock=client_socket) + self.client_address = client_address self.input_buffer = [] self.set_terminator(settings.MPD_LINE_TERMINATOR) - self.handler = handler() + self.handler = handler(session=self) self.send_response(u'OK MPD %s' % get_mpd_version()) + def close_when_done(self): + logger.info(u'Closing connection with [%s]:%s', *self.client_address) + asynchat.async_chat.close_when_done(self) + def collect_incoming_data(self, data): self.input_buffer.append(data) def found_terminator(self): - data = ''.join(self.input_buffer) + data = ''.join(self.input_buffer).strip() self.input_buffer = [] input = data.decode(settings.MPD_LINE_ENCODING) logger.debug(u'Input: %s', input) diff --git a/tests/handlertest.py b/tests/handlertest.py index 7e07c3a5..7cd12b72 100644 --- a/tests/handlertest.py +++ b/tests/handlertest.py @@ -418,11 +418,17 @@ class StickersHandlerTest(unittest.TestCase): pass # TODO +class DummySession(object): + def close(self): + pass + + class ConnectionHandlerTest(unittest.TestCase): def setUp(self): self.h = handler.MpdHandler() def test_close(self): + self.h.session = DummySession() result = self.h.handle_request(u'close') self.assert_(result is None)