from __future__ import with_statement

import logging
import os
import sys
import time

from datetime import datetime

from AbletonIPC import create_ipc_channel


logger = logging.getLogger()


def MCerrDebug(*args):
    ## ts = int(time.time() * 1000000)
    ## sys.stderr.write("PID:%i:%s:" % (os.getpid(), ts, ))
    ## for arg in args:
    ##     sys.stderr.write(str(arg))
    ## sys.stderr.write("\n")
    pass


def echo_callback(etype, payload):
    MCerrDebug(etype, payload)
    channel.send("echo", payload)


def terminate_callback(etype, payload):
    MCerrDebug(etype, payload)
    sys.exit()


def remove_echo_callback(etype, payload):
    channel.UnregisterEventTypeListener("echo")


channel = None


sentinel_file, ipc_channel_name = sys.argv[1:3]

logger.debug("after imports")
logger.debug(sentinel_file)
logger.debug(ipc_channel_name)

MCerrDebug("client ipc_channel_name ", ipc_channel_name)
MCerrDebug("client sentinel_file", sentinel_file)


logger.debug("before channel creation")

for i in xrange(60):
    try:
        channel = create_ipc_channel(ipc_channel_name, False)
        break
    except:
        logger.exception("channel creation error")
        time.sleep(0.1)

if channel is None:
    raise sys.exc_info()[1]

logger.debug("after channel creation")

channel.register_event("echo", echo_callback)
channel.register_event("terminate", terminate_callback)
channel.register_event("remove_echo", remove_echo_callback)

with open(sentinel_file, "w") as outf:
    pass

logger.debug("after sentinel file creation\nbefore channel creation")

for _ in xrange(100):  # run for maximal 10 seconds
    channel.poll()
    time.sleep(0.1)

sys.exit(1)
