Browse Source

Added time synchronization

Mark Mine 21 years ago
parent
commit
ed6ed31206

+ 5 - 3
direct/src/cluster/ClusterClient.py

@@ -82,10 +82,11 @@ class ClusterClient(DirectObject.DirectObject):
         taskMgr.add(self.synchronizeTimeTask, "synchronizeTimeTask", -40)
 
     def synchronizeTimeTask(self,task):
+        frameCount = globalClock.getFrameCount()
         frameTime = globalClock.getFrameTime()
         dt = globalClock.getDt()
         for server in self.serverList:
-            server.sendTimeData(frameTime, dt)
+            server.sendTimeData(frameCount, frameTime, dt)
         return Task.cont
 
     def startMoveCamTask(self):
@@ -293,9 +294,10 @@ class DisplayConnection:
         datagram = self.msgHandler.makeExitDatagram()
         self.cw.send(datagram, self.tcpConn)
 
-    def sendTimeData(self,frameTime, dt):
+    def sendTimeData(self,frameCount, frameTime, dt):
         ClusterClient.notify.debug("send time data...")
-        datagram = self.msgHandler.makeTimeDataDatagram(frameTime, dt)
+        datagram = self.msgHandler.makeTimeDataDatagram(
+            frameCount, frameTime, dt)
         self.cw.send(datagram, self.tcpConn)
 
 class ClusterConfigItem:

+ 4 - 2
direct/src/cluster/ClusterMsgs.py

@@ -226,20 +226,22 @@ class ClusterMsgHandler:
         datagram.addUint8(CLUSTER_EXIT)
         return datagram
         
-    def makeTimeDataDatagram(self,frameTime, dt):
+    def makeTimeDataDatagram(self,frameCount, frameTime, dt):
         datagram = PyDatagram()
         datagram.addUint32(self.packetNumber)
         self.packetNumber = self.packetNumber + 1
         datagram.addUint8(CLUSTER_TIME_DATA)
+        datagram.addUint32(frameCount)
         datagram.addFloat32(frameTime)
         datagram.addFloat32(dt)
         return datagram
 
     def parseTimeDataDatagram(self, dgi):
+        frameCount=dgi.getUint32()
         frameTime=dgi.getFloat32()
         dt=dgi.getFloat32()
         self.notify.debug('time data=%f %f' % (frameTime, dt))
-        return (frameTime, dt)
+        return (frameCount, frameTime, dt)
 
 
 

+ 4 - 4
direct/src/cluster/ClusterServer.py

@@ -50,8 +50,8 @@ class ClusterServer(DirectObject.DirectObject):
         if clusterSyncFlag:
             self.startSwapCoordinator()
             base.graphicsEngine.setAutoFlip(0)
-        # Set global clock mode to non-real time
-        globalClock.setMode(ClockObject.MNonRealTime)
+        # Set global clock mode to slave mode
+        globalClock.setMode(ClockObject.MSlave)
         # Send verification of startup to client
         self.daemon = DirectD()
         # These must be passed in as bootstrap arguments and stored in
@@ -204,9 +204,9 @@ class ClusterServer(DirectObject.DirectObject):
 
     def handleTimeData(self,dgi):
         """ Update cameraJig position to reflect latest position """
-        (frameTime, dt) = self.msgHandler.parseTimeDataDatagram(dgi)
+        (frameCount,frameTime,dt) = self.msgHandler.parseTimeDataDatagram(dgi)
         # Use frame time from client for both real and frame time
-        globalClock.setRealTime(frameTime)
+        globalClock.setFrameCount(frameCount)
         globalClock.setFrameTime(frameTime)
         globalClock.setDt(dt)