| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| import jsonrpclib |
| import SimpleJSONRPCServer as _server |
| |
| |
| class RequestHandler(_server.SimpleJSONRPCRequestHandler): |
| """Custom JSON-RPC request handler.""" |
| |
| FILES = { |
| 'client.html': {'content-type': 'text/html'}, |
| 'host.html': {'content-type': 'text/html'}, |
| 'client.js': {'content-type': 'application/javascript'}, |
| 'host.js': {'content-type': 'application/javascript'}, |
| 'jsonrpc.js': {'content-type': 'application/javascript'} |
| } |
| |
| def do_GET(self): |
| """Custom GET handler to return default pages.""" |
| filename = self.path.lstrip('/') |
| if filename not in self.FILES: |
| self.report_404() |
| return |
| with open(filename) as f: |
| data = f.read() |
| self.send_response(200) |
| for key, value in self.FILES[filename].iteritems(): |
| self.send_header(key, value) |
| self.end_headers() |
| self.wfile.write(data) |
| |
| |
| class RPCHandler(object): |
| """Class to define and handle RPC calls.""" |
| |
| CLEARED_EVENT = {'action': 0, 'event': 0, 'modifiers': 0} |
| |
| def __init__(self): |
| self.last_event = self.CLEARED_EVENT |
| |
| def ClearLastEvent(self): |
| """Clear the last event.""" |
| self.last_event = self.CLEARED_EVENT |
| return True |
| |
| def SetLastEvent(self, action, value, modifier): |
| """Set the last action, value, and modifiers.""" |
| self.last_event = { |
| 'action': action, |
| 'value': value, |
| 'modifiers': modifier |
| } |
| return True |
| |
| def GetLastEvent(self): |
| return self.last_event |
| |
| |
| def main(): |
| server = _server.SimpleJSONRPCServer( |
| ('', 3474), requestHandler=RequestHandler, |
| logRequests=True, allow_none=True) |
| server.register_instance(RPCHandler()) |
| server.serve_forever() |
| |
| |
| if __name__ == '__main__': |
| main() |