Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/p2p/StreamWriter.py
blob: f30801ea25f80a43859c446550efae8d70a76c35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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)