home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / common / hydrasocket.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  2.1 KB  |  52 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import socket
  5. from util.primitives.funcs import do
  6. from util.primitives.synchronization import lock
  7. from common.timeoutsocket import iptuples, TimeoutSocket
  8.  
  9. class HydraSocket(object):
  10.     
  11.     def tryconnect(self, ips, on_connect, on_fail, timeout = 2, cls = TimeoutSocket):
  12.         self._ips = iptuples(ips)
  13.         self.on_connect = on_connect
  14.         self.on_fail = on_fail
  15.         self.timetowait = timeout
  16.         self.numfails = 0
  17.         self.success = False
  18.         self.socks = [ cls(False) for __ in self._ips ]
  19.         self.connected_sock = None
  20.         [ sock.tryconnect(ip, self.on_success, self.singlefail, timeout = self.timetowait) for sock, ip in zip(self.socks, self._ips) ]
  21.  
  22.     
  23.     def on_success(self, sock):
  24.         if self.success:
  25.             sock.do_disconnect()
  26.         else:
  27.             sock.cancel_timeout()
  28.             (do,)((lambda .0: for sock_ in .0:
  29. if sock_ is not sock:
  30. sock_.do_disconnect()continue)(self.socks))
  31.             self.success = True
  32.             self.connected_sock = sock
  33.             self.on_connect(sock)
  34.  
  35.     on_success = lock(on_success)
  36.     
  37.     def singlefail(self):
  38.         self.numfails += 1
  39.         if self.numfails >= len(self._ips):
  40.             self.on_fail()
  41.         
  42.  
  43.     singlefail = lock(singlefail)
  44.     
  45.     def send(self, *a, **k):
  46.         if self.connected_sock is None:
  47.             raise socket.error('HydraSocket is not connected')
  48.         self.connected_sock is None
  49.         self.connected_sock.send(*a, **k)
  50.  
  51.  
  52.