Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/miniTamTam
diff options
context:
space:
mode:
authoramartin <olpc@xo-00-CE-12.localdomain>2007-06-19 19:55:57 (GMT)
committer amartin <olpc@xo-00-CE-12.localdomain>2007-06-19 19:55:57 (GMT)
commit6dac818750901beb90b79584b41e2df9be673c7c (patch)
tree3126459fb008560c20ca9cb888661a6a530bd765 /miniTamTam
parent88ae320e89aae962d21b29738481427db03d2194 (diff)
network
Diffstat (limited to 'miniTamTam')
-rw-r--r--miniTamTam/miniTamTamMain.py30
1 files changed, 24 insertions, 6 deletions
diff --git a/miniTamTam/miniTamTamMain.py b/miniTamTam/miniTamTamMain.py
index b5bace2..466ecf2 100644
--- a/miniTamTam/miniTamTamMain.py
+++ b/miniTamTam/miniTamTamMain.py
@@ -99,13 +99,18 @@ class miniTamTamMain(SubActivity):
self.network.connectMessage( Net.HT_SYNC_REPLY, self.processHT_SYNC_REPLY )
self.network.connectMessage( Net.HT_TEMPO_UPDATE, self.processHT_TEMPO_UPDATE )
self.network.connectMessage( Net.PR_SYNC_QUERY, self.processPR_SYNC_QUERY )
+ self.network.connectMessage( Net.PR_TEMPO_QUERY, self.processPR_TEMPO_QUERY )
# data packing classes
self.packer = xdrlib.Packer()
self.unpacker = xdrlib.Unpacker("")
-
- self.updateSync()
- self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
+
+ if self.network.isHost():
+ self.updateSync()
+ self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
+ elif self.network.isPeer():
+ self.sendTempoQuery()
+ self.syncTimeout = gobject.timeout_add( 1000, self.updateSync )
def drawSliders( self ):
mainSliderBox = RoundHBox(fillcolor = Config.PANEL_COLOR, bordercolor = Config.PANEL_BCK_COLOR, radius = Config.PANEL_RADIUS)
@@ -359,6 +364,10 @@ class miniTamTamMain(SubActivity):
pass
def handleTempoSliderChange(self,adj):
+ if self.network.isHost():
+ t = time.time()
+ percent = self.heartbeatElapsed() / self.beatDuration
+
self.tempo = int(adj.value)
self.beatDuration = 60.0/self.tempo
self.ticksPerSecond = Config.TICKS_PER_BEAT*self.tempo/60.0
@@ -367,6 +376,8 @@ class miniTamTamMain(SubActivity):
self.drumFillin.setTempo(self.tempo)
if self.network.isHost():
+ self.heatbeatStart = t - percent*self.beatDuration
+ self.updateSync()
self.sendTempoUpdate()
img = int(self.scale( self.tempo,
@@ -527,7 +538,7 @@ class miniTamTamMain(SubActivity):
#-- Senders ------------------------------------------------------------
- def querySync( self ):
+ def sendSyncQuery( self ):
self.packer.pack_float(random.random())
hash = self.packer.get_buffer()
self.packer.reset()
@@ -539,6 +550,9 @@ class miniTamTamMain(SubActivity):
self.network.sendAll( Net.HT_TEMPO_UPDATE, self.packer.get_buffer() )
self.packer.reset()
+ def sendTempoQuery( self ):
+ self.network.send( Net.PR_TEMPO_QUERY )
+
#-- Handlers -----------------------------------------------------------
def processHT_SYNC_REPLY( self, sock, message, data ):
@@ -555,13 +569,17 @@ class miniTamTamMain(SubActivity):
def processHT_TEMPO_UPDATE( self, sock, message, data ):
self.unpacker.reset(data)
self.tempoAdjustment.set_value( self.unpacker.unpack_int() )
- self.querySync()
+ self.sendSyncQuery()
def processPR_SYNC_QUERY( self, sock, message, data ):
self.packer.pack_float(self.nextHeartbeat())
self.network.send( Net.HT_SYNC_REPLY, data + self.packer.get_buffer(), sock )
self.packer.reset()
+ def processPR_TEMPO_QUERY( self, sock, message, data ):
+ self.packer.pack_int(self.tempo)
+ self.network.send( Net.HT_TEMPO_UPDATE, self.packer.get_buffer(), to = sock )
+ self.packer.reset()
#-----------------------------------------------------------------------
# Sync
@@ -589,7 +607,7 @@ class miniTamTamMain(SubActivity):
elif self.network.isHost():
self.correctSync()
else:
- self.querySync()
+ self.sendSyncQuery()
return True
def correctSync( self ):