From d74707423c4696100660d8c0b59356965885e5c2 Mon Sep 17 00:00:00 2001 From: Roger Hughston Date: Wed, 21 Jul 2004 21:18:06 +0000 Subject: [PATCH] dded Support for 64bit Server Channels ---------------------------------------------------------------------- src/dcparser/dcClass.cxx src/dcparser/dcClass.h src/dcparser/dcField.cxx src/dcparser/dcField.h src/dcparser/dcPacker.h src/dcparser/dcbase.h src/distributed/DistributedObjectAI.py src/distributed/PyDatagram.py src/distributed/PyDatagramIterator.py src/distributed/cConnectionRepository.I src/distributed/cConnectionRepository.cxx src/distributed/cConnectionRepository.h ---------------------------------------------------------------------- --- direct/src/dcparser/dcClass.cxx | 12 +++++++----- direct/src/dcparser/dcClass.h | 5 +++-- direct/src/dcparser/dcField.cxx | 6 +++--- direct/src/dcparser/dcField.h | 2 +- direct/src/dcparser/dcPacker.h | 5 +++++ direct/src/dcparser/dcbase.h | 5 +++++ direct/src/distributed/PyDatagram.py | 3 +++ direct/src/distributed/PyDatagramIterator.py | 2 ++ direct/src/distributed/cConnectionRepository.I | 4 ++-- direct/src/distributed/cConnectionRepository.cxx | 6 ++++-- direct/src/distributed/cConnectionRepository.h | 10 ++++++---- 11 files changed, 41 insertions(+), 19 deletions(-) diff --git a/direct/src/dcparser/dcClass.cxx b/direct/src/dcparser/dcClass.cxx index 1e2cf7eea5..2fdfe485f4 100644 --- a/direct/src/dcparser/dcClass.cxx +++ b/direct/src/dcparser/dcClass.cxx @@ -635,7 +635,7 @@ client_format_update(const string &field_name, int do_id, //////////////////////////////////////////////////////////////////// Datagram DCClass:: ai_format_update(const string &field_name, int do_id, - int to_id, int from_id, PyObject *args) const { + CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const { DCField *field = get_field_by_name(field_name); if (field == (DCField *)NULL) { ostringstream strm; @@ -663,12 +663,14 @@ ai_format_update(const string &field_name, int do_id, //////////////////////////////////////////////////////////////////// Datagram DCClass:: ai_format_generate(PyObject *distobj, int do_id, - int zone_id, int district_id, int from_channel_id, + int zone_id, CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id, PyObject *optional_fields) const { + DCPacker packer; - packer.raw_pack_uint32(district_id); - packer.raw_pack_uint32(from_channel_id); + + packer.RAW_PACK_CHANNEL(district_channel_id); + packer.RAW_PACK_CHANNEL(from_channel_id); packer.raw_pack_uint8('A'); bool has_optional_fields = (PyObject_IsTrue(optional_fields) != 0); @@ -678,7 +680,7 @@ ai_format_generate(PyObject *distobj, int do_id, } else { packer.raw_pack_uint16(STATESERVER_OBJECT_GENERATE_WITH_REQUIRED); } - + packer.raw_pack_uint32(zone_id); packer.raw_pack_uint16(_number); packer.raw_pack_uint32(do_id); diff --git a/direct/src/dcparser/dcClass.h b/direct/src/dcparser/dcClass.h index 85c63fceb8..378a2929af 100644 --- a/direct/src/dcparser/dcClass.h +++ b/direct/src/dcparser/dcClass.h @@ -78,12 +78,13 @@ PUBLISHED: const DCField *field) const; + Datagram client_format_update(const string &field_name, int do_id, PyObject *args) const; Datagram ai_format_update(const string &field_name, int do_id, - int to_id, int from_id, PyObject *args) const; + CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const; Datagram ai_format_generate(PyObject *distobj, int do_id, int zone_id, - int district_id, int from_channel_id, + CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id, PyObject *optional_fields) const; #endif diff --git a/direct/src/dcparser/dcField.cxx b/direct/src/dcparser/dcField.cxx index 1e4cc6483a..8c2f189e80 100644 --- a/direct/src/dcparser/dcField.cxx +++ b/direct/src/dcparser/dcField.cxx @@ -516,11 +516,11 @@ client_format_update(int do_id, PyObject *args) const { // object from the AI. //////////////////////////////////////////////////////////////////// Datagram DCField:: -ai_format_update(int do_id, int to_id, int from_id, PyObject *args) const { +ai_format_update(int do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const { DCPacker packer; - packer.raw_pack_uint32(to_id); - packer.raw_pack_uint32(from_id); + packer.RAW_PACK_CHANNEL(to_id); + packer.RAW_PACK_CHANNEL(from_id); packer.raw_pack_uint8('A'); packer.raw_pack_uint16(STATESERVER_OBJECT_UPDATE_FIELD); packer.raw_pack_uint32(do_id); diff --git a/direct/src/dcparser/dcField.h b/direct/src/dcparser/dcField.h index 14aa875d3b..1240c5330f 100644 --- a/direct/src/dcparser/dcField.h +++ b/direct/src/dcparser/dcField.h @@ -79,7 +79,7 @@ PUBLISHED: void receive_update(DCPacker &packer, PyObject *distobj) const; Datagram client_format_update(int do_id, PyObject *args) const; - Datagram ai_format_update(int do_id, int to_id, int from_id, + Datagram ai_format_update(int do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const; #endif diff --git a/direct/src/dcparser/dcPacker.h b/direct/src/dcparser/dcPacker.h index f5d01b718c..3c3353a56a 100755 --- a/direct/src/dcparser/dcPacker.h +++ b/direct/src/dcparser/dcPacker.h @@ -151,6 +151,11 @@ PUBLISHED: INLINE void raw_pack_float64(double value); INLINE void raw_pack_string(const string &value); +// this is a hack to allw me to get in and out of 32bit Mode Faster +// need to agree with channel_type in dcbase.h +#define RAW_PACK_CHANNEL(in) raw_pack_int64(in) + + INLINE int raw_unpack_int8(); INLINE int raw_unpack_int16(); INLINE int raw_unpack_int32(); diff --git a/direct/src/dcparser/dcbase.h b/direct/src/dcparser/dcbase.h index 355ed8ee1a..9cd86a21b9 100644 --- a/direct/src/dcparser/dcbase.h +++ b/direct/src/dcparser/dcbase.h @@ -111,6 +111,11 @@ typedef long long PN_int64; typedef unsigned long long PN_uint64; #endif + + #endif // WITHIN_PANDA +//typedef unsigned long CHANNEL_TYPE; +typedef PN_uint64 CHANNEL_TYPE; + #endif // DCBASE_H diff --git a/direct/src/distributed/PyDatagram.py b/direct/src/distributed/PyDatagram.py index d7391d88bf..01b1e8be20 100755 --- a/direct/src/distributed/PyDatagram.py +++ b/direct/src/distributed/PyDatagram.py @@ -27,6 +27,9 @@ class PyDatagram(Datagram): STBlob32 : (Datagram.addString32, None), } + + addChannel = Datagram.addUint64 + def putArg(self, arg, subatomicType, divisor=1): if (divisor == 1): funcSpecs = self.FuncDict.get(subatomicType) diff --git a/direct/src/distributed/PyDatagramIterator.py b/direct/src/distributed/PyDatagramIterator.py index 76aad07f2c..3ec326216d 100755 --- a/direct/src/distributed/PyDatagramIterator.py +++ b/direct/src/distributed/PyDatagramIterator.py @@ -27,6 +27,8 @@ class PyDatagramIterator(DatagramIterator): STBlob32 : DatagramIterator.getString32, } + getChannel = DatagramIterator.getUint64 + def getArg(self, subatomicType, divisor=1): # Import the type numbers if divisor == 1: diff --git a/direct/src/distributed/cConnectionRepository.I b/direct/src/distributed/cConnectionRepository.I index 791c2f635d..fc542c9754 100644 --- a/direct/src/distributed/cConnectionRepository.I +++ b/direct/src/distributed/cConnectionRepository.I @@ -141,7 +141,7 @@ get_datagram_iterator(DatagramIterator &di) { // was sent, according to the datagram headers. This // information is not available to the client. //////////////////////////////////////////////////////////////////// -INLINE unsigned int CConnectionRepository:: +INLINE CHANNEL_TYPE CConnectionRepository:: get_msg_channel() const { return _msg_channel; } @@ -153,7 +153,7 @@ get_msg_channel() const { // according to the datagram headers. This information // is not available to the client. //////////////////////////////////////////////////////////////////// -INLINE unsigned int CConnectionRepository:: +INLINE CHANNEL_TYPE CConnectionRepository:: get_msg_sender() const { return _msg_sender; } diff --git a/direct/src/distributed/cConnectionRepository.cxx b/direct/src/distributed/cConnectionRepository.cxx index 60920d4fc3..51236cf7c1 100644 --- a/direct/src/distributed/cConnectionRepository.cxx +++ b/direct/src/distributed/cConnectionRepository.cxx @@ -133,8 +133,8 @@ check_datagram() { _di = DatagramIterator(_dg); if (!_client_datagram) { - _msg_channel = _di.get_uint32(); - _msg_sender = _di.get_uint32(); + _msg_channel = _di.get_uint64(); + _msg_sender = _di.get_uint64(); _sec_code = _di.get_uint8(); #ifdef HAVE_PYTHON @@ -142,7 +142,9 @@ check_datagram() { // structure, to support legacy code that expects to find it // there. if (_python_repository != (PyObject *)NULL) { + // Dave Needs to fix interage.. PyObject *value = PyInt_FromLong(_msg_sender); +// PyObject *value = PyLong_FromUnsignedLongLong(_msg_sender); PyObject_SetAttrString(_python_repository, "msgSender", value); Py_DECREF(value); } diff --git a/direct/src/distributed/cConnectionRepository.h b/direct/src/distributed/cConnectionRepository.h index f9268e9be3..fba283cbc2 100644 --- a/direct/src/distributed/cConnectionRepository.h +++ b/direct/src/distributed/cConnectionRepository.h @@ -21,6 +21,8 @@ #include "directbase.h" #include "pointerTo.h" + +#include "dcbase.h" #include "dcFile.h" #include "dcField.h" // to pick up Python.h @@ -78,8 +80,8 @@ PUBLISHED: bool check_datagram(); INLINE void get_datagram(Datagram &dg); INLINE void get_datagram_iterator(DatagramIterator &di); - INLINE unsigned int get_msg_channel() const; - INLINE unsigned int get_msg_sender() const; + INLINE CHANNEL_TYPE get_msg_channel() const; + INLINE CHANNEL_TYPE get_msg_sender() const; INLINE unsigned char get_sec_code() const; INLINE unsigned int get_msg_type() const; @@ -122,8 +124,8 @@ private: Datagram _dg; DatagramIterator _di; - unsigned int _msg_channel; - unsigned int _msg_sender; + CHANNEL_TYPE _msg_channel; + CHANNEL_TYPE _msg_sender; unsigned char _sec_code; unsigned int _msg_type;