changeset 1104:448fe9f81501

start to convert subserver to offer the new effects Ignore-this: 8dcbd993db2e451d80da200cd2cfbc81
author Drew Perttula <drewp@bigasterisk.com>
date Mon, 09 Jun 2014 07:30:23 +0000
parents 771f50f19b4b
children 0440fb0f458b
files bin/subserver light9/subserver/chases.coffee light9/subserver/chases.jade light9/subserver/effects.coffee light9/subserver/effects.jade
diffstat 5 files changed, 87 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/bin/subserver	Mon Jun 09 07:10:39 2014 +0000
+++ b/bin/subserver	Mon Jun 09 07:30:23 2014 +0000
@@ -37,9 +37,29 @@
         log.info("got message %s" % message)
         self.sendMessage(message)
         
+class EffectsUpdates(cyclone.websocket.WebSocketHandler):
+    def connectionMade(self, *args, **kwargs):
+        self.connected = True
+        self.settings.graph.addHandler(self.onGraphChange)
+        
+    def connectionLost(self, reason):
+        self.connected = False
+        
+    def onGraphChange(self):
+        if not self.connected:
+            return
+        graph = self.settings.graph
+        classes = []
+        for e in graph.subjects(RDF.type, L9['EffectClass']):
+            classes.append({'uri': e,
+                            'label': graph.label(e),
+                            'code': graph.value(e, L9['code'])})
+        print "sendMessage", classes
+        self.sendMessage({'classes': classes})
+
 class Static(PrettyErrorHandler, cyclone.web.StaticFileHandler):
     def get(self, path, *args, **kw):
-        if path in ['', 'chases']:
+        if path in ['', 'effects']:
             return self.respondStaticJade("light9/subserver/%s.jade" %
                                           (path or 'index'))
             
@@ -129,6 +149,7 @@
     port = 8052
     reactor.listenTCP(port, cyclone.web.Application(handlers=[
         (r'/live', Live),
+        (r'/effectsUpdates', EffectsUpdates),
         (r'/snapshot', Snapshot),
         (r'/static/(.*)', cyclone.web.StaticFileHandler, {'path': 'static/'}),
         (r'/(.*)', Static,
--- a/light9/subserver/chases.coffee	Mon Jun 09 07:10:39 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-class Model
-  constructor: ->
-    @chases = ko.observable([])
-    @moreExprs = [
-      {label: "rainbow", expr: "hsv(t*1,1,1)"},
-      {label: "pulserainbow", expr: "hsv(t*1,1,1)*nsin(t*2)"},
-      {label: "stacrainbow", expr: "hsv(t*1,1,1)*(nsin(t*2)>.7)"},
-      {label: "alternatergb", expr: "hsv(t*1,1,1, light='left')*nsin(t*3) + hsv(t*1,1,1,light='right')*(1-nsin(t*3))"},
-      {label: "frontchase", expr: "chase(t, names=frontchase, ontime=.3, offset=-.11)"},
-      {label: "bumpyhues", expr: "hsv(t*.5,.4,1)*notch(t*.01)"},
-      ]
-
-  subtermLink: (label, expr) =>
-    "http://chase?"+$.param({
-      subtermName: label
-      subtermExpr: label + '_env(t) * ' + expr
-      curve: label + '_env'
-    })
-  subtermExprs: (chase) =>
-    [
-      'chase(t, names=LABEL, ontime=0.5, offset=0.2)'.replace(/LABEL/g, chase.label)
-    ]
-  
-
-
-model = new Model()
-
-# this sort of works to stop clicks in <input> from following the
-# submaster hyperlink, but it may make certain clicks act wrong
-$('a').live('click', (ev) ->
-  return false if ev.target.tagName == 'INPUT'
-)
-
-reconnectingWebSocket "ws://localhost:8052/live", (msg) ->
-  model.chases(msg.chases) if msg.chases?
-
-
-ko.applyBindings(model)
\ No newline at end of file
--- a/light9/subserver/chases.jade	Mon Jun 09 07:10:39 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-doctype html
-html
-  head
-    title effects
-    link(rel='stylesheet', href='style.css')
-  body
-    h1 Effects
-
-    div(data-bind="foreach: moreExprs")
-      div.resource.chase
-        span(data-bind="text: label")
-        | 
-        a.resource(data-bind="attr: {href: $root.subtermLink(label, expr)}, text: expr")
-    
-    div(data-bind="foreach: chases")
-      div.resource.chase
-        | Chase
-        a(data-bind="attr: {href: uri}, text: label")
-        ul(data-bind="foreach: $parent.subtermExprs($data)")
-          li: a.resource(data-bind="attr: {href: $root.subtermLink($parent.label, $data)}, text: $data")
-
-    #status
-      
-    script(src="static/jquery-2.1.1.min.js")
-    script(src="static/knockout-3.1.0.js")
-    script(src="static/websocket.js")
-    script(src="chases.js")
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/light9/subserver/effects.coffee	Mon Jun 09 07:30:23 2014 +0000
@@ -0,0 +1,38 @@
+class Model
+  constructor: ->
+    @chases = ko.observable([])
+    @moreExprs = [
+      {label: "rainbow", expr: "hsv(t*1,1,1)"},
+      {label: "pulserainbow", expr: "hsv(t*1,1,1)*nsin(t*2)"},
+      {label: "stacrainbow", expr: "hsv(t*1,1,1)*(nsin(t*2)>.7)"},
+      {label: "alternatergb", expr: "hsv(t*1,1,1, light='left')*nsin(t*3) + hsv(t*1,1,1,light='right')*(1-nsin(t*3))"},
+      {label: "frontchase", expr: "chase(t, names=frontchase, ontime=.3, offset=-.11)"},
+      {label: "bumpyhues", expr: "hsv(t*.5,.4,1)*notch(t*.01)"},
+      ]
+
+  subtermLink: (label, expr) =>
+    "http://chase?"+$.param({
+      subtermName: label
+      subtermExpr: label + '_env(t) * ' + expr
+      curve: label + '_env'
+    })
+  subtermExprs: (chase) =>
+    [
+      'chase(t, names=LABEL, ontime=0.5, offset=0.2)'.replace(/LABEL/g, chase.label)
+    ]
+  
+
+
+model = new Model()
+
+
+reconnectingWebSocket "ws://localhost:8052/effectsUpdates", (msg) ->
+  model.chases(msg.chases) if msg.chases?
+
+# this sort of works to stop clicks in <input> from following the
+# submaster hyperlink, but it may make certain clicks act wrong
+$(document).on('click', 'a', (ev) ->
+  return false if ev.target.tagName == 'INPUT'
+)
+
+ko.applyBindings(model)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/light9/subserver/effects.jade	Mon Jun 09 07:30:23 2014 +0000
@@ -0,0 +1,27 @@
+doctype html
+html
+  head
+    title effects
+    link(rel='stylesheet', href='style.css')
+  body
+    h1 Effects
+
+    div(data-bind="foreach: moreExprs")
+      div.resource.chase
+        span(data-bind="text: label")
+        | 
+        a.resource(data-bind="attr: {href: $root.subtermLink(label, expr)}, text: expr")
+    
+    div(data-bind="foreach: chases")
+      div.resource.chase
+        | Chase
+        a(data-bind="attr: {href: uri}, text: label")
+        ul(data-bind="foreach: $parent.subtermExprs($data)")
+          li: a.resource(data-bind="attr: {href: $root.subtermLink($parent.label, $data)}, text: $data")
+
+    #status
+      
+    script(src="static/jquery-2.1.1.min.js")
+    script(src="static/knockout-3.1.0.js")
+    script(src="static/websocket.js")
+    script(src="effects.js")
\ No newline at end of file