import zmq,time,json

'''
pingpong
'''

ctx = zmq.Context()
pub = ctx.socket(zmq.PUB)
pub.connect('tcp://127.0.0.1:6666')

left,top,width,heigth = (0,0,500,400)
baseradius = 5
spacing = baseradius * 2 + 1
makeX = lambda i : (i+1) * spacing
makeY = lambda i : (i+1) * spacing
balls = [
    #('id','x','y','vx','vy','radius')
    ('%s:%s'%(i,j), makeX(i) ,makeY(j) ,1   ,-1   , baseradius)
    for i in range(10)
    for j in range(10)
    if makeX(i) < width
    if makeY(i) < heigth
]
print('%s objects generated' % len(balls))
def everyBalls((i,x,y,vx,vy,radius)):
        if x + radius + vx > width:
            vx = -1
            x = width-radius
        elif x - radius + vx < left:
            vx = 1
            x = left+radius
        else:
            x = x + vx
        if y + radius + vy > heigth:
            vy = -1
            y = heigth-radius
        elif y - radius + vy < top:
            vy = top+1
            y = radius
        else:
            y = y + vy
        return i,x,y,vx,vy,radius

def view(lst):
    for (i,x,y,vx,vy,radius) in lst:
        payload = {
            'x':x,
            'y':y,
            #'radius':radius,
            #'event':'drawCircle',
            'w':radius,
            'h':radius,
            'event':'drawRect',
            'stroke':'black',
            'fill':'red',
            'id':i
        }
        #print(payload)
        #pub.send_multipart(('*',json.dumps({'event':'refresh','id':'pingpong'})))
        pub.send_multipart(('*',json.dumps(payload)))
 
while True:
   balls = [ everyBalls(ball) for ball in balls ]
   view(balls)
   #time.sleep(0.1)
pub.close()
ctx.term()
