Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/p2p/Stream.py
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2006-05-22 01:30:26 (GMT)
committer Dan Williams <dcbw@redhat.com>2006-05-22 01:30:26 (GMT)
commit2c272cc8925540562b9a45202b674d7a75a33263 (patch)
treee391bf1353f5900083c9170e946261ae6bc487b9 /sugar/p2p/Stream.py
parent1c54ef5002071ceb408b25a47de25c1458f7aaee (diff)
Do buddy icons
Diffstat (limited to 'sugar/p2p/Stream.py')
-rw-r--r--sugar/p2p/Stream.py24
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)