70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
|
# Copyright 2016 The Chromium OS Authors. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
"""Tester feedback backend service implementation."""
|
||
|
|
||
|
import SimpleXMLRPCServer
|
||
|
import multiprocessing
|
||
|
|
||
|
import feedback_delegate
|
||
|
import request_multiplexer
|
||
|
|
||
|
# TODO(garnold) Load query delegate implementations as they become available
|
||
|
# (b/26769927).
|
||
|
# pylint: disable=unused-import
|
||
|
import audio_query_delegate_impl
|
||
|
|
||
|
|
||
|
class FeedbackService(object):
|
||
|
"""The feedback service main object."""
|
||
|
|
||
|
def __init__(self):
|
||
|
self._multiplexer = None
|
||
|
self._server_port = 0
|
||
|
self._server_process = None
|
||
|
self._running = False
|
||
|
|
||
|
|
||
|
@property
|
||
|
def server_port(self):
|
||
|
"""Returns the service listening port."""
|
||
|
return self._server_port
|
||
|
|
||
|
|
||
|
def start(self):
|
||
|
"""Starts the feedback service."""
|
||
|
if self._running:
|
||
|
return
|
||
|
|
||
|
# Start the feedback request multiplexer.
|
||
|
self._multiplexer = request_multiplexer.FeedbackRequestMultiplexer()
|
||
|
self._multiplexer.start()
|
||
|
|
||
|
# Start the feedback delegate RPC server.
|
||
|
rpc_server = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost', 0))
|
||
|
rpc_server.register_instance(
|
||
|
feedback_delegate.FeedbackDelegate(self._multiplexer))
|
||
|
self._server_port = rpc_server.server_address[1]
|
||
|
self._server_process = multiprocessing.Process(
|
||
|
target=rpc_server.serve_forever)
|
||
|
self._server_process.start()
|
||
|
|
||
|
self._running = True
|
||
|
|
||
|
|
||
|
def stop(self):
|
||
|
"""Stops the feedback service."""
|
||
|
if not self._running:
|
||
|
return
|
||
|
|
||
|
# Stop the RPC server.
|
||
|
self._server_process.terminate()
|
||
|
self._server_process.join()
|
||
|
self._server_port = 0
|
||
|
|
||
|
# Stop the multiplexer.
|
||
|
self._multiplexer.stop()
|
||
|
|
||
|
self._running = False
|