Added time synchronization

This commit is contained in:
Mark Mine 2005-02-26 02:05:46 +00:00
parent 637052eddc
commit ed6ed31206
3 changed files with 13 additions and 9 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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)