protocol added
diff --git a/sensors/protocol.py b/sensors/protocol.py
index fa88927..5d3bf65 100644
--- a/sensors/protocol.py
+++ b/sensors/protocol.py
@@ -1,8 +1,11 @@
+import time
import socket
import select
import cPickle as pickle
from urlparse import urlparse
+import cp_transport
+
class Timeout(Exception):
pass
@@ -104,6 +107,34 @@
raise Timeout()
+class HugeUDPTransport(ITransport, cp_transport.Sender):
+ def __init__(self, receiver, ip, port):
+ cp_transport.Sender.__init__(self, port=port, host=ip)
+ if receiver:
+ self.bind()
+
+ def send(self, data):
+ self.send_by_protocol(data)
+
+ def recv(self, timeout=None):
+ begin = time.time()
+
+ while True:
+
+ try:
+ # return not None, if packet is ready
+ ready = self.recv_by_protocol()
+ # if data ready - return it
+ if ready is not None:
+ return ready
+ # if data not ready - check if it's time to die
+ if time.time() - begin >= timeout:
+ break
+
+ except cp_transport.Timeout:
+ # no answer yet - check, if timeout end
+ if time.time() - begin >= timeout:
+ break
# -------------------------- Factory function --------------------------------
@@ -115,6 +146,9 @@
ip, port = parsed_uri.netloc.split(":")
return UDPTransport(receiver, ip=ip, port=int(port),
packer_cls=PickleSerializer)
+ elif parsed_uri.scheme == 'hugeudp':
+ ip, port = parsed_uri.netloc.split(":")
+ return HugeUDPTransport(receiver, ip=ip, port=int(port))
else:
templ = "Can't instantiate transport from {0!r}"
raise ValueError(templ.format(uri))