Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/p2p/StreamWriter.py
diff options
context:
space:
mode:
Diffstat (limited to 'sugar/p2p/StreamWriter.py')
-rw-r--r--sugar/p2p/StreamWriter.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/sugar/p2p/StreamWriter.py b/sugar/p2p/StreamWriter.py
new file mode 100644
index 0000000..f30801e
--- /dev/null
+++ b/sugar/p2p/StreamWriter.py
@@ -0,0 +1,43 @@
+import xmlrpclib
+import traceback
+import socket
+
+import network
+
+class StreamWriter:
+ def __init__(self, group, service):
+ self._group = group
+ self._service = service
+ self._address = self._service.get_address()
+ self._port = self._service.get_port()
+
+ if self._service.is_multicast():
+ self._setup_multicast()
+ else:
+ self._setup_unicast()
+
+ def write(self, data):
+ if self._service.is_multicast():
+ self._multicast_write(data)
+ else:
+ self._unicast_write(data)
+
+ def _setup_unicast(self):
+ xmlrpc_addr = "http://%s:%d" % (self._address, self._port)
+ self._uclient = xmlrpclib.ServerProxy(xmlrpc_addr)
+
+ def _unicast_write(self, data):
+ try:
+ nick_name = self._group.get_owner().get_nick_name()
+ self._uclient.message(nick_name, data)
+ return True
+ except (socket.error, xmlrpclib.Fault, xmlrpclib.ProtocolError), e:
+ traceback.print_exc()
+ return False
+
+ def _setup_multicast(self):
+ self._mclient = network.GroupClient(self._address, self._port)
+
+ def _multicast_write(self, data):
+ nick_name = self._group.get_owner().get_nick_name()
+ self._mclient.send_msg(nick_name + " |**| " + data)