annot-server/oscserver.py
author ymh <ymh.work@gmail.com>
Wed, 08 Oct 2014 15:14:58 +0200
changeset 0 e1d4d7a8255a
child 31 2323ee3ad20f
permissions -rw-r--r--
First shareable version


#
# 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 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.utcfromtimestamp(ntplib.ntp_to_system_time(values[0]))

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

        self.process_annotation(params)