datagram improvements
This commit is contained in:
parent
4805d1285c
commit
bc70d28fc5
|
|
@ -4,7 +4,8 @@
|
|||
# both ClusterClient and ClusterServer.
|
||||
|
||||
from PandaModules import *
|
||||
import Datagram
|
||||
from PyDatagram import PyDatagram
|
||||
from PyDatagramIterator import PyDatagramIterator
|
||||
import time
|
||||
|
||||
#these are the types of messages that are currently supported.
|
||||
|
|
@ -87,14 +88,14 @@ class ClusterMsgHandler:
|
|||
return (datagram, dgi, type)
|
||||
|
||||
def readHeader(self,datagram):
|
||||
dgi = DatagramIterator(datagram)
|
||||
dgi = PyDatagramIterator(datagram)
|
||||
number = dgi.getUint32()
|
||||
type = dgi.getUint8()
|
||||
self.notify.debug("Packet %d type %d received" % (number,type))
|
||||
return (dgi,type)
|
||||
|
||||
def makeCamOffsetDatagram(self,xyz,hpr):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_CAM_OFFSET)
|
||||
|
|
@ -117,7 +118,7 @@ class ClusterMsgHandler:
|
|||
return (x,y,z,h,p,r)
|
||||
|
||||
def makeCamFrustumDatagram(self,focalLength, filmSize, filmOffset):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_CAM_FRUSTUM)
|
||||
|
|
@ -138,7 +139,7 @@ class ClusterMsgHandler:
|
|||
return (focalLength, filmSize, filmOffset)
|
||||
|
||||
def makeCamMovementDatagram(self,xyz,hpr):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_CAM_MOVEMENT)
|
||||
|
|
@ -162,7 +163,7 @@ class ClusterMsgHandler:
|
|||
return (x,y,z,h,p,r)
|
||||
|
||||
def makeSelectedMovementDatagram(self,xyz,hpr,scale):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_SELECTED_MOVEMENT)
|
||||
|
|
@ -192,7 +193,7 @@ class ClusterMsgHandler:
|
|||
return (x,y,z,h,p,r,sx,sy,sz)
|
||||
|
||||
def makeCommandStringDatagram(self, commandString):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_COMMAND_STRING)
|
||||
|
|
@ -204,21 +205,21 @@ class ClusterMsgHandler:
|
|||
return command
|
||||
|
||||
def makeSwapNowDatagram(self):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_SWAP_NOW)
|
||||
return datagram
|
||||
|
||||
def makeSwapReadyDatagram(self):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_SWAP_READY)
|
||||
return datagram
|
||||
|
||||
def makeExitDatagram(self):
|
||||
datagram = Datagram.Datagram()
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint32(self.packetNumber)
|
||||
self.packetNumber = self.packetNumber + 1
|
||||
datagram.addUint8(CLUSTER_EXIT)
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import PythonUtil
|
|||
import ParentMgr
|
||||
import RelatedObjectMgr
|
||||
import time
|
||||
from PyDatagram import PyDatagram
|
||||
|
||||
class ClientRepository(ConnectionRepository.ConnectionRepository):
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory("ClientRepository")
|
||||
|
|
@ -347,7 +348,7 @@ class ClientRepository(ConnectionRepository.ConnectionRepository):
|
|||
currentGameStateName)
|
||||
|
||||
def sendSetShardMsg(self, shardId):
|
||||
datagram = Datagram()
|
||||
datagram = PyDatagram()
|
||||
# Add message type
|
||||
datagram.addUint16(CLIENT_SET_SHARD)
|
||||
# Add shard id
|
||||
|
|
@ -356,7 +357,7 @@ class ClientRepository(ConnectionRepository.ConnectionRepository):
|
|||
self.send(datagram)
|
||||
|
||||
def sendSetZoneMsg(self, zoneId, visibleZoneList=None):
|
||||
datagram = Datagram()
|
||||
datagram = PyDatagram()
|
||||
# Add message type
|
||||
datagram.addUint16(CLIENT_SET_ZONE)
|
||||
# Add zone id
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ from PandaModules import *
|
|||
import Task
|
||||
import DirectNotifyGlobal
|
||||
import DirectObject
|
||||
from PyDatagram import PyDatagram
|
||||
|
||||
class ConnectionRepository(DirectObject.DirectObject):
|
||||
"""
|
||||
|
|
@ -251,7 +252,7 @@ class ConnectionRepository(DirectObject.DirectObject):
|
|||
self.reportReaderStatistics()
|
||||
|
||||
if self.connectHttp:
|
||||
datagram = Datagram()
|
||||
datagram = PyDatagram()
|
||||
if self.tcpConn.receiveDatagram(datagram):
|
||||
if self.rsDoReport:
|
||||
self.rsDatagramCount += 1
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
from PandaObject import *
|
||||
from DirectNotifyGlobal import *
|
||||
from PyDatagram import PyDatagram
|
||||
from PyDatagramIterator import PyDatagramIterator
|
||||
|
||||
# Values for DistributedObject.activeState
|
||||
|
||||
|
|
@ -299,8 +301,8 @@ class DistributedObject(PandaObject):
|
|||
# handling whatever it should handle in its current state, it
|
||||
# should call doneBarrier(), which will send the context
|
||||
# number back to the AI.
|
||||
dg = Datagram(data)
|
||||
dgi = DatagramIterator(dg)
|
||||
dg = PyDatagram(data)
|
||||
dgi = PyDatagramIterator(dg)
|
||||
while dgi.getRemainingSize() > 0:
|
||||
context = dgi.getUint16()
|
||||
numToons = dgi.getUint16()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,126 @@
|
|||
|
||||
# This is built as a subclass instead of an extension so we can define the
|
||||
# class variable FuncDict and so we can import DCSubatomicType at the top
|
||||
# of the file rather than every time we call the putArg function.
|
||||
|
||||
from PandaModules import *
|
||||
# Import the type numbers
|
||||
from DCSubatomicType import *
|
||||
|
||||
class PyDatagramIterator(DatagramIterator):
|
||||
|
||||
# This is a little helper Dict to replace the huge <if> statement
|
||||
# for trying to match up datagram subatomic types with add funtions
|
||||
# If Python had an O(1) "case" statement we would use that instead
|
||||
FuncDict = {
|
||||
STInt8 : DatagramIterator.getInt8,
|
||||
STInt16 : DatagramIterator.getInt16,
|
||||
STInt32 : DatagramIterator.getInt32,
|
||||
STInt64 : DatagramIterator.getInt64,
|
||||
STUint8 : DatagramIterator.getUint8,
|
||||
STUint16 : DatagramIterator.getUint16,
|
||||
STUint32 : DatagramIterator.getUint32,
|
||||
STUint64 : DatagramIterator.getUint64,
|
||||
STFloat64 : DatagramIterator.getFloat64,
|
||||
STString : DatagramIterator.getString,
|
||||
STBlob : DatagramIterator.getString,
|
||||
STBlob32 : DatagramIterator.getString32,
|
||||
}
|
||||
|
||||
def getArg(self, subatomicType, divisor=1):
|
||||
# Import the type numbers
|
||||
if divisor == 1:
|
||||
# See if it is in the handy dict
|
||||
getFunc = self.FuncDict.get(subatomicType)
|
||||
if getFunc:
|
||||
retVal = getFunc(self)
|
||||
# No division necessary
|
||||
elif subatomicType == STInt8array:
|
||||
len = self.getUint16()
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt8())
|
||||
elif subatomicType == STInt16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt16())
|
||||
elif subatomicType == STInt32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt32())
|
||||
elif subatomicType == STUint8array:
|
||||
len = self.getUint16()
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint8())
|
||||
elif subatomicType == STUint16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint16())
|
||||
elif subatomicType == STUint32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint32())
|
||||
elif subatomicType == STUint32uint8array:
|
||||
len = self.getUint16() / 5
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
a = self.getUint32()
|
||||
b = self.getUint8()
|
||||
retVal.append((a, b))
|
||||
else:
|
||||
raise Exception("Error: No such type as: " + str(subAtomicType))
|
||||
else:
|
||||
# See if it is in the handy dict
|
||||
getFunc = self.FuncDict.get(subatomicType)
|
||||
if getFunc:
|
||||
retVal = (getFunc(self)/float(divisor))
|
||||
elif subatomicType == STInt8array:
|
||||
len = self.getUint8() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt8()/float(divisor))
|
||||
elif subatomicType == STInt16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt16()/float(divisor))
|
||||
elif subatomicType == STInt32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt32()/float(divisor))
|
||||
elif subatomicType == STUint8array:
|
||||
len = self.getUint8() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint8()/float(divisor))
|
||||
elif subatomicType == STUint16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint16()/float(divisor))
|
||||
elif subatomicType == STUint32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint32()/float(divisor))
|
||||
elif subatomicType == STUint32uint8array:
|
||||
len = self.getUint16() / 5
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
a = self.getUint32()
|
||||
b = self.getUint8()
|
||||
retVal.append((a / float(divisor), b / float(divisor)))
|
||||
else:
|
||||
raise Exception("Error: No such type as: " + str(subatomicType))
|
||||
|
||||
|
||||
|
||||
return retVal
|
||||
|
||||
|
||||
|
|
@ -5,6 +5,8 @@ from TaskManagerGlobal import *
|
|||
from MsgTypes import *
|
||||
import Task
|
||||
import DirectNotifyGlobal
|
||||
from PyDatagram import PyDatagram
|
||||
from PyDatagramIterator import PyDatagramIterator
|
||||
|
||||
class ServerRepository:
|
||||
|
||||
|
|
@ -63,19 +65,19 @@ class ServerRepository:
|
|||
|
||||
def handleDatagram(self, datagram):
|
||||
print "Server got a datagram!"
|
||||
dgi = DatagramIterator(datagram)
|
||||
dgi = PyDatagramIterator(datagram)
|
||||
print dgi.getUint16()
|
||||
print dgi.getString()
|
||||
print dgi.getUint32()
|
||||
print dgi.getUint16()
|
||||
|
||||
newDatagram = Datagram()
|
||||
newDatagram = PyDatagram()
|
||||
newDatagram.addUint16(LOGIN_RESPONSE)
|
||||
newDatagram.addUint8(ord('s'))
|
||||
self.cw.send(newDatagram, self.lastConnection)
|
||||
|
||||
def sendAvatarGenerate(self):
|
||||
datagram = Datagram()
|
||||
datagram = PyDatagram()
|
||||
# Message type is 1
|
||||
datagram.addUint16(ALL_OBJECT_GENERATE_WITH_REQUIRED)
|
||||
# Avatar class type is 2
|
||||
|
|
|
|||
|
|
@ -1,138 +0,0 @@
|
|||
|
||||
def getArg(self, subatomicType, divisor=1):
|
||||
# Import the type numbers
|
||||
import DCSubatomicType
|
||||
if divisor == 1:
|
||||
# No division necessary
|
||||
if subatomicType == DCSubatomicType.STInt8:
|
||||
retVal = self.getInt8()
|
||||
elif subatomicType == DCSubatomicType.STInt16:
|
||||
retVal = self.getInt16()
|
||||
elif subatomicType == DCSubatomicType.STInt32:
|
||||
retVal = self.getInt32()
|
||||
elif subatomicType == DCSubatomicType.STInt64:
|
||||
retVal = self.getInt64()
|
||||
elif subatomicType == DCSubatomicType.STUint8:
|
||||
retVal = self.getUint8()
|
||||
elif subatomicType == DCSubatomicType.STUint16:
|
||||
retVal = self.getUint16()
|
||||
elif subatomicType == DCSubatomicType.STUint32:
|
||||
retVal = self.getUint32()
|
||||
elif subatomicType == DCSubatomicType.STUint64:
|
||||
retVal = self.getUint64()
|
||||
elif subatomicType == DCSubatomicType.STFloat64:
|
||||
retVal = self.getFloat64()
|
||||
elif subatomicType == DCSubatomicType.STString:
|
||||
retVal = self.getString()
|
||||
elif subatomicType == DCSubatomicType.STBlob:
|
||||
retVal = self.getString()
|
||||
elif hasattr(DCSubatomicType, "STBlob32") and subatomicType == DCSubatomicType.STBlob32:
|
||||
retVal = self.getString32()
|
||||
elif subatomicType == DCSubatomicType.STInt8array:
|
||||
len = self.getUint16()
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt8())
|
||||
elif subatomicType == DCSubatomicType.STInt16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt16())
|
||||
elif subatomicType == DCSubatomicType.STInt32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt32())
|
||||
elif subatomicType == DCSubatomicType.STUint8array:
|
||||
len = self.getUint16()
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint8())
|
||||
elif subatomicType == DCSubatomicType.STUint16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint16())
|
||||
elif subatomicType == DCSubatomicType.STUint32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint32())
|
||||
elif subatomicType == DCSubatomicType.STUint32uint8array:
|
||||
len = self.getUint16() / 5
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
a = self.getUint32()
|
||||
b = self.getUint8()
|
||||
retVal.append((a, b))
|
||||
else:
|
||||
raise Exception("Error: No such type as: " + str(subAtomicType))
|
||||
else:
|
||||
# This needs to be divided
|
||||
if subatomicType == DCSubatomicType.STInt8:
|
||||
retVal = (self.getInt8()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STInt16:
|
||||
retVal = (self.getInt16()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STInt32:
|
||||
retVal = (self.getInt32()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STInt64:
|
||||
retVal = (self.getInt64()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint8:
|
||||
retVal = (self.getUint8()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint16:
|
||||
retVal = (self.getUint16()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint32:
|
||||
retVal = (self.getUint32()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint64:
|
||||
retVal = (self.getUint64()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STFloat64:
|
||||
retVal = self.getFloat64()
|
||||
elif subatomicType == DCSubatomicType.STString:
|
||||
retVal = self.getString()
|
||||
elif subatomicType == DCSubatomicType.STBlob:
|
||||
retVal = self.getString()
|
||||
elif subatomicType == DCSubatomicType.STInt8array:
|
||||
len = self.getUint8() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt8()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STInt16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt16()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STInt32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getInt32()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint8array:
|
||||
len = self.getUint8() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint8()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint16array:
|
||||
len = self.getUint16() >> 1
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint16()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint32array:
|
||||
len = self.getUint16() >> 2
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
retVal.append(self.getUint32()/float(divisor))
|
||||
elif subatomicType == DCSubatomicType.STUint32uint8array:
|
||||
len = self.getUint16() / 5
|
||||
retVal = []
|
||||
for i in range(len):
|
||||
a = self.getUint32()
|
||||
b = self.getUint8()
|
||||
retVal.append((a / float(divisor), b / float(divisor)))
|
||||
else:
|
||||
raise Exception("Error: No such type as: " + str(subatomicType))
|
||||
|
||||
|
||||
|
||||
return retVal
|
||||
|
||||
|
||||
Loading…
Reference in New Issue