# HG changeset patch # User ymh # Date 1421374579 -3600 # Node ID 79ae42ad97d414d4f72d6d3b41438abfac1c0567 # Parent 9611905b58fe39ef6c27ca125914d70af2707146 optimize and refactor pianoroll component diff -r 9611905b58fe -r 79ae42ad97d4 annot-server/websockets.py --- a/annot-server/websockets.py Tue Jan 13 15:27:20 2015 +0100 +++ b/annot-server/websockets.py Fri Jan 16 03:16:19 2015 +0100 @@ -1,4 +1,3 @@ - # # See LICENCE for detail # Copyright (c) 2014 IRI @@ -50,8 +49,8 @@ def register(self, client): if not client in self.clients: - print("registered client {}".format(client.peer)) - self.clients.append(client) + print("registered client {}".format(client.peer)) + self.clients.append(client) def unregister(self, client): if client in self.clients: @@ -60,11 +59,11 @@ if client in self.filters: self.filters.pop(client, None) - def broadcast(self, msg, filter): + def broadcast(self, msg, filter_list): print("broadcasting prepared message '{}' ..".format(msg)) preparedMsg = self.prepareMessage(msg) for c in self.clients: - if all([ (k in filter and filter[k] in v) for k,v in self.filters.get(c, {}).items()]): + if all([ (k in filter_list and filter_list[k] in v) for k,v in self.filters.get(c, {}).items()]): c.sendPreparedMessage(preparedMsg) print("prepared message sent to {}".format(c.peer)) diff -r 9611905b58fe -r 79ae42ad97d4 client/annotviz/app/index.html --- a/client/annotviz/app/index.html Tue Jan 13 15:27:20 2015 +0100 +++ b/client/annotviz/app/index.html Fri Jan 16 03:16:19 2015 +0100 @@ -18,8 +18,9 @@

- stop intervals - - temps écoulé : + stop intervals - + start intervals - + temps écoulé :


     
@@ -28,8 +29,8 @@
     
     
     
 
 
diff -r 9611905b58fe -r 79ae42ad97d4 client/annotviz/app/js/main.js
--- a/client/annotviz/app/js/main.js	Tue Jan 13 15:27:20 2015 +0100
+++ b/client/annotviz/app/js/main.js	Fri Jan 16 03:16:19 2015 +0100
@@ -5,11 +5,20 @@
  * Take a look at http://browserify.org/ for more info
  */
 
+ /* global window: false */
+ /* global document: false */
+ /* global WebSocket: false */
+ /* global MozWebSocket: false */
+
+ /* global eventCode: false */
 'use strict';
 
 
 var PIXI = require('pixi');
+var _ = require('lodash');
 
+
+var NTP_EPOCH_DELTA = 2208988800; //c.f. RFC 868
 // Config vars
 var logger = false;
 var sceneWidth = 1920;
@@ -22,14 +31,10 @@
 var manualFramerate = pixelsPerSecond1 / 4;
 var pixelsPerSecond2 = Math.floor(sceneWidth / 60); // nb of pixels per second
 var lineInterval = 5000; // means line every 5 seconds
-var nbLines = -1;
-var noteHeight = 110;
+//var noteHeight = 110;
 var noteColors = [0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991];
 var colorsReg = {};
-// Vars
-var noteDict = [];
 // Timecode method
-var timePageLoaded = Date.now();
 var offsetMusic = false;
 
 
@@ -47,12 +52,38 @@
 uberContainer.position.y = 0;
 stage.addChild(uberContainer);
 
-var PianoRoll = require('./pianoroll.js')
+var PianoRoll = require('./pianoroll.js');
 
 // Init containers
 var containerList = [];
-containerList.push(new PianoRoll(uberContainer, 0, 0, prHeight1, true, pixelsPerSecond1, sceneWidth, noteColors, colorsReg, lineColor, lineInterval, offsetMusic, prHeight1 / 128));
-containerList.push(new PianoRoll(uberContainer, 0, prHeight1, prHeight2, false, pixelsPerSecond2, sceneWidth, noteColors, colorsReg, lineColor, lineInterval, offsetMusic, prHeight2 / 128));
+
+var pianorollOptions = {
+    parentContainer: uberContainer,
+    xInit: 0,
+    width: sceneWidth,
+    noteColors: noteColors,
+    colorsReg: colorsReg,
+    lineColor: lineColor,
+    lineInterval: lineInterval,
+    offsetMusic: offsetMusic
+};
+
+
+containerList.push(new PianoRoll(_.extend(_.clone(pianorollOptions), {
+    yInit: 0,
+    height: prHeight1,
+    linesDown: true,
+    pixelsPerSecond: pixelsPerSecond1,
+    noteHeight: prHeight1 / 128
+})));
+containerList.push(new PianoRoll(_.extend(_.clone(pianorollOptions), {
+    yInit: prHeight1,
+    height: prHeight2,
+    linesDown: false,
+    pixelsPerSecond: pixelsPerSecond2,
+    noteHeight: prHeight2 / 128
+})));
+
 
 // Line between two containers
 var graphics = new PIXI.Graphics();
@@ -64,52 +95,16 @@
 stage.addChild(graphics);
 
 
-function replaceContainers(){
-    var diff = (Date.now() - timePageLoaded)/1000;// nb of seconds since page loaded
-    //console.log("replace ! diff1 = ", container1.x - Math.floor(-diff*pixelsPerSecond1), ", diff 2 = ", container2.x - Math.floor(-diff*pixelsPerSecond2));
-    for(var i=0;i 0:
+                time.sleep(sleep_time)
+            #time.sleep(0.1)
+            tc = row_conv[1].value
             self._send(osc.Message(self.address,*row_conv))
         print("Goodbye.")
         reactor.callLater(0.1, reactor.stop)
 
+class Token(object):
+    def __init__(self):
+        self.running = True
+
 if __name__ == "__main__":
 
+    token = Token()
+
     parser = argparse.ArgumentParser(description='Simulate an (osc) pianoroll client.')
     parser.add_argument('datafile', metavar='DATAFILE', help='The file containing the pianoroll data (CSV).')
     parser.add_argument('-e', '--event', dest='event', metavar='EVENT', required=True, help='the event code.')
@@ -56,8 +70,16 @@
 
     args = parser.parse_args()
 
+    def customHandler(signum, _):
+        print("Got signal: %s" % signum)
+        token.running = False
+        if reactor.running:
+            reactor.callFromThread(reactor.stop) # to stop twisted code when in the reactor loop
+    signal.signal(signal.SIGINT, customHandler)
+
+
     with open(args.datafile, 'rU') as datafile:
         reader = csv.reader(datafile, delimiter=' ')
-        app = UDPSenderApplication(9090, "127.0.0.1", "/pianoroll/%s/" % args.event, list(reader), args.shift)
+        app = UDPSenderApplication(9090, "127.0.0.1", "/pianoroll/%s/" % args.event, list(reader), args.shift, token)
 
     reactor.run()