diff options
author | Dan Williams <dcbw@redhat.com> | 2006-05-22 01:30:26 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2006-05-22 01:30:26 (GMT) |
commit | 2c272cc8925540562b9a45202b674d7a75a33263 (patch) | |
tree | e391bf1353f5900083c9170e946261ae6bc487b9 /sugar/p2p/Stream.py | |
parent | 1c54ef5002071ceb408b25a47de25c1458f7aaee (diff) |
Do buddy icons
Diffstat (limited to 'sugar/p2p/Stream.py')
-rw-r--r-- | sugar/p2p/Stream.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/sugar/p2p/Stream.py b/sugar/p2p/Stream.py index 77d8945..e6c1a91 100644 --- a/sugar/p2p/Stream.py +++ b/sugar/p2p/Stream.py @@ -1,11 +1,14 @@ import xmlrpclib import socket +import traceback import network from MostlyReliablePipe import MostlyReliablePipe class Stream(object): def __init__(self, service, group): + if not service: + raise ValueError("service must be valid") self._service = service self._group = group self._owner_nick_name = self._group.get_owner().get_nick_name() @@ -32,6 +35,8 @@ class Stream(object): class UnicastStreamWriter(object): def __init__(self, stream, service, owner_nick_name): # set up the writer + if not service: + raise ValueError("service must be valid") self._service = service self._owner_nick_name = owner_nick_name self._address = self._service.get_address() @@ -40,6 +45,7 @@ class UnicastStreamWriter(object): self._writer = xmlrpclib.ServerProxy(self._xmlrpc_addr) def write(self, data): + """Write some data to the default endpoint of this pipe on the remote server.""" try: self._writer.message(self._owner_nick_name, data) return True @@ -47,6 +53,15 @@ class UnicastStreamWriter(object): traceback.print_exc() return False + def custom_request(self, method_name, *args): + """Call a custom XML-RPC method on the remote server.""" + try: + method = getattr(self._writer, method_name) + return method(*args) + except (socket.error, xmlrpclib.Fault, xmlrpclib.ProtocolError): + traceback.print_exc() + return None + class UnicastStream(Stream): def __init__(self, service, group): @@ -62,18 +77,23 @@ class UnicastStream(Stream): while not started and tries > 0: try: self._reader = network.GlibXMLRPCServer(("", port)) - self._reader.register_instance(self) + self._reader.register_function(self._message, "message") started = True except(socket.error): port = port + 1 tries = tries - 1 self._service.set_port(port) - def message(self, nick_name, message): + def _message(self, nick_name, message): """Called by the XMLRPC server when network data arrives.""" self.recv(nick_name, message) return True + def register_handler(self, handler, name): + if name == "message": + raise ValueError("Handler name 'message' is a reserved handler.") + self._reader.register_function(handler, name) + def new_writer(self, service): return UnicastStreamWriter(self, service, self._owner_nick_name) |