#!/usr/bin/env python import sys import time import unittest import ipaaca class Receiver(object): def __init__(self): self.count = 0 self.last_time = 0 self.ib = ipaaca.InputBuffer('PowerIn', ['spam']) self.ib.register_handler(self.handle_iu_event) def handle_iu_event(self, iu, event_type, local): if self.count==0: self.last_time=time.time() self.count+=1 if self.count==1000: print "Received 1k IU updates at", int(1000.0/(time.time()-self.last_time)), "Hz" self.count=0 def run(self): while True: time.sleep(1) class Sender(object): def __init__(self, send_frequency): self.ob = ipaaca.OutputBuffer('PowerOut') self.iu = ipaaca.IU('spam') self.iu.payload = {'data':'0'} self.ob.add(self.iu) self.counter = 0 self.frequency = send_frequency self.delay = 1.0/send_frequency def run(self): print "Sending with", self.delay ,"s delay - upper bound ",self.frequency,"Hz ..." last_time = time.time() while True: time.sleep(self.delay) self.counter += 1 self.iu.payload['data'] = str(self.counter) if self.counter == 1000: print "Sent 1k updates at", int(1000.0/(time.time()-last_time)),"Hz" last_time = time.time() self.counter = 0 #print ".", #sys.stdout.flush() if __name__ == '__main__': if len(sys.argv)<2: print "specify either 'sender' or 'receiver' as an argument" print " for the sender, you can additionally specify a delay (in 1/s)" print " between 1 and 10000 please (=> 1 sec ... 0.0001 sec) [default: 1000 => 0.001 sec]" sys.exit(1) if sys.argv[1] == 'receiver': r = Receiver() r.run() elif sys.argv[1] == 'sender': freq=1000 try: freq = int(sys.argv[2]) except: pass if freq<1 or freq>10000: print "Between 1 and 10000 please (=> 1 sec ... 0.0001 sec)" sys.exit(1) s = Sender(send_frequency=freq) s.run() else: print "specify either 'sender' or 'receiver' as an argument" sys.exit(1)