annot-server/oscserver.py
author cavaliet
Fri, 17 Oct 2014 16:51:48 +0200
changeset 37 2d0e6a207048
parent 31 2323ee3ad20f
child 42 926f0426ce78
permissions -rw-r--r--
convert categories.json into url parameter for embed iframe colorisation


#
# See LICENCE for detail
# Copyright (c) 2014 IRI
#

import datetime
import json
import uuid

from txosc import dispatch
from txosc.osc import getAddressParts
from txosc.async import DatagramServerProtocol

import ntplib

from dateutil.tz import tzutc

from baseserver import BaseProtocol
import utils


class OSCServerProtocol(DatagramServerProtocol, BaseProtocol):
    """
    Receive UDP OSC messages
    """

    def __init__(self, ws_factory, conn):
        self.receiver = dispatch.Receiver()
        self.receiver.addCallback("/pianoroll/*/", self.processPianorollAnnotation)
        self._init_props(ws_factory, conn)

    def processPianorollAnnotation(self, message, address):

        values = message.getValues()
        ts = datetime.datetime.fromtimestamp(ntplib.ntp_to_system_time(values[0]), tzutc())

        params = {
            'ts' : ts,
            'event': getAddressParts(message.address)[1],
            'channel' : utils.PIANOROLL_CHANNEL,
            'content' : values
        }

        self.process_annotation(params)