diff options
Diffstat (limited to 'sugar/p2p/StreamWriter.py')
-rw-r--r-- | sugar/p2p/StreamWriter.py | 43 |
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) |