diff --git a/direct/src/cluster/ClusterClient.py b/direct/src/cluster/ClusterClient.py index 183ac336f4..df14786d95 100644 --- a/direct/src/cluster/ClusterClient.py +++ b/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: diff --git a/direct/src/cluster/ClusterMsgs.py b/direct/src/cluster/ClusterMsgs.py index e615773c9d..1191fef91b 100644 --- a/direct/src/cluster/ClusterMsgs.py +++ b/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) diff --git a/direct/src/cluster/ClusterServer.py b/direct/src/cluster/ClusterServer.py index a8328169f5..781b8c647b 100644 --- a/direct/src/cluster/ClusterServer.py +++ b/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)