Guest User

python twisted

a guest
Feb 26th, 2015
419
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.85 KB | None | 0 0
  1. class UDPClient(protocol.DatagramProtocol):
  2.  
  3.     def __init__(self, server_host, server_port, payload_generator):
  4.         self.server_host = server_host
  5.         self.server_port = server_port
  6.         self.payload_generator = payload_generator
  7.         self.response_callback = None
  8.         self.timeout_callback = None
  9.         self.timeout = None
  10.  
  11.     def set_response_callback(self, response_callback):
  12.         self.response_callback = response_callback
  13.  
  14.     def set_timeout_callback(self, timeout_delay, timeout_callback):
  15.         self.timeout_delay = timeout_delay
  16.         self.timeout_callback = timeout_callback
  17.  
  18.     def startProtocol(self):
  19.         print "Sending UDP request to SignalServer"
  20.         self.transport.connect(self.server_host, self.server_port)
  21.         self.transport.write(self.payload_generator())
  22.         if self.timeout_callback is not None:
  23.             self.timeout = reactor.callLater(self.timeout_delay, self.timedout)
  24.         print "Exiting startProtocol"
  25.  
  26.     def datagramReceived(self, datagram, addr):
  27.         if self.timeout is not None:
  28.             self.timeout.cancel()
  29.         print "Received UDP response from SignalServer"
  30.         print "Data : " + binascii.hexlify(datagram)
  31.         self.transport.loseConnection()
  32.         if self.response_callback is not None:
  33.             reactor.callWhenRunning(self.response_callback, datagram)
  34.  
  35.     def timedout(self):
  36.         print "Timed out while waiting for UDP response"
  37.         reactor.callWhenRunning(self.timeout_callback)
  38.  
  39.  
  40.  
  41. if __name__ == '__main__':
  42.  
  43.     def get_signaling_payload():
  44.         payload = [ 0x9, 0xb1]
  45.         return bytearray(payload)
  46.  
  47.     udp_client = UDPClient('aa.bb.cc.dd', 1234, get_signaling_payload)
  48.     import sys
  49.     udp_client.set_response_callback(lambda x : sys.stdout.write(x))
  50.     reactor.listenUDP(0, udp_client)
  51.     reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment