1 ####################################################################
3 import threading, socket, traceback, time
7 return ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(N))
10 class Irc(threading.Thread):
12 def __init__(self, processor, host, nick):
13 self.processor = processor
14 threading.Thread.__init__(self)
21 return self.peers.values()
24 NICK = 'E_'+random_string(10)
25 while not self.processor.shared.stopped():
28 s.connect(('irc.freenode.net', 6667))
29 s.send('USER electrum 0 * :'+self.host+' '+self.nick+'\n')
30 s.send('NICK '+NICK+'\n')
31 s.send('JOIN #electrum\n')
32 sf = s.makefile('r', 0)
34 while not self.processor.shared.stopped():
36 line = line.rstrip('\r\n')
39 s.send('PONG '+line[1]+'\n')
40 elif '353' in line: # answer to /names
42 for item in line[k+1:]:
44 s.send('WHO %s\n'%item)
45 elif '352' in line: # answer to /who
46 # warning: this is a horrible hack which apparently works
49 ip = socket.gethostbyname(ip)
52 self.peers[name] = (ip,host)
53 if time.time() - t > 5*60:
54 self.processor.push_response({'method':'server.peers', 'result':[self.get_peers()]})
55 s.send('NAMES #electrum\n')
59 traceback.print_exc(file=sys.stdout)