import liblo
import sys

port=7777

try:
    server = liblo.Server(port)
    print("Waiting for connections on port " + str(port))
except liblo.ServerError as err:
    print(str(err))
    sys.exit()


def msg1_callback(path,args):
    a,b,c = args
    print("Received %s" % (path))
    print("Contains %d, %f, %s" % (a,b,c))

def msg2_callback(path,args):
    a,b = args
    print("Received %s" % (path))
    print("Contains %d, %s" % (a,b))


def blob_callback(path,args,types,src,data):
    print("Received %s" % (path))
    print("Blob contains %d items, user data: '%s'" % (len(args[0]),data))
    for item in args[0]:
      print(item)


def fallback(path,args,types,src):
    print( "got unknown message '%s' from '%s'" % (path, src.url))
    for a, t in zip(args, types):
        print( "argument of type '%s': %s" % (t, a))


server.add_method("/test/msg1",'ifs',msg1_callback)
server.add_method("/test/msg2",'is',msg2_callback)
server.add_method("/test/blob",'b',blob_callback,"Optional user data")

server.add_method(None,None,fallback)


# loop and dispatch messages every 100ms
while True:
    server.recv(100)

