From 8ea908c855f77b37f8d5d9bbf62620624cccee7b Mon Sep 17 00:00:00 2001 From: Sam Edwards Date: Mon, 21 Oct 2013 10:04:35 -0600 Subject: [PATCH] Huge update: Change distributed protocol to match the newly-changed Astron protocol. --- direct/src/dcparser/dcClass.cxx | 108 +-------- direct/src/dcparser/dcClass.h | 5 - direct/src/dcparser/dcField.cxx | 4 +- direct/src/dcparser/dcmsgtypes.h | 15 +- .../distributed/AstronDatabaseInterface.py | 6 +- .../distributed/AstronInternalRepository.py | 23 +- direct/src/distributed/DoInterestManager.py | 20 +- direct/src/distributed/MsgTypes.py | 208 +++++++++--------- .../src/distributed/cConnectionRepository.cxx | 12 +- .../cDistributedSmoothNodeBase.cxx | 4 +- 10 files changed, 161 insertions(+), 244 deletions(-) diff --git a/direct/src/dcparser/dcClass.cxx b/direct/src/dcparser/dcClass.cxx index cd9a3856b3..1d14698ff3 100644 --- a/direct/src/dcparser/dcClass.cxx +++ b/direct/src/dcparser/dcClass.cxx @@ -581,15 +581,9 @@ receive_update_broadcast_required_owner(PyObject *distobj, for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) { DCField *field = get_inherited_field(i); if (field->as_molecular_field() == (DCMolecularField *)NULL && - field->is_required()) { + field->is_required() && (field->is_ownrecv() || field->is_broadcast())) { packer.begin_unpack(field); - if (field->is_ownrecv()) { - field->receive_update(packer, distobj); - } else { - // It's not an ownrecv field; skip over it. It's difficult - // to filter this on the server, ask Roger for the reason. - packer.unpack_skip(); - } + field->receive_update(packer, distobj); if (!packer.end_unpack()) { break; } @@ -1024,7 +1018,6 @@ client_format_generate_CMU(PyObject *distobj, DOID_TYPE do_id, } #endif // HAVE_PYTHON -#ifdef HAVE_PYTHON //////////////////////////////////////////////////////////////////// // Function: DCClass::ai_format_generate // Access: Published @@ -1051,20 +1044,18 @@ ai_format_generate(PyObject *distobj, DOID_TYPE do_id, bool has_optional_fields = (PyObject_IsTrue(optional_fields) != 0); if (has_optional_fields) { - packer.raw_pack_uint16(STATESERVER_OBJECT_GENERATE_WITH_REQUIRED_OTHER); + packer.raw_pack_uint16(STATESERVER_CREATE_OBJECT_WITH_REQUIRED_OTHER); } else { - packer.raw_pack_uint16(STATESERVER_OBJECT_GENERATE_WITH_REQUIRED); + packer.raw_pack_uint16(STATESERVER_CREATE_OBJECT_WITH_REQUIRED); } - + + packer.raw_pack_uint32(do_id); // Parent is a bit overloaded; this parent is not about inheritance, // this one is about the visibility container parent, i.e. the zone // parent: - if (parent_id) { - packer.raw_pack_uint32(parent_id); - } + packer.raw_pack_uint32(parent_id); packer.raw_pack_uint32(zone_id); packer.raw_pack_uint16(_number); - packer.raw_pack_uint32(do_id); // Specify all of the required fields. int num_fields = get_num_inherited_fields(); @@ -1114,91 +1105,6 @@ ai_format_generate(PyObject *distobj, DOID_TYPE do_id, return Datagram(packer.get_data(), packer.get_length()); } -#endif // HAVE_PYTHON -#ifdef HAVE_PYTHON -//////////////////////////////////////////////////////////////////// -// Function: DCClass::ai_database_generate_context -// Access: Published -// Description: Generates a datagram containing the message necessary -// to create a new database distributed object from the AI. -// -// First Pass is to only incldue required values -// (with Defaults). -//////////////////////////////////////////////////////////////////// -Datagram DCClass:: -ai_database_generate_context( - unsigned int context_id, DOID_TYPE parent_id, ZONEID_TYPE zone_id, - CHANNEL_TYPE owner_channel, - CHANNEL_TYPE database_server_id, CHANNEL_TYPE from_channel_id) const -{ - DCPacker packer; - packer.raw_pack_uint8(1); - packer.RAW_PACK_CHANNEL(database_server_id); - packer.RAW_PACK_CHANNEL(from_channel_id); - //packer.raw_pack_uint8('A'); - packer.raw_pack_uint16(STATESERVER_OBJECT_CREATE_WITH_REQUIRED_CONTEXT); - packer.raw_pack_uint32(parent_id); - packer.raw_pack_uint32(zone_id); - packer.RAW_PACK_CHANNEL(owner_channel); - packer.raw_pack_uint16(_number); // DCD class ID - packer.raw_pack_uint32(context_id); - - // Specify all of the required fields. - int num_fields = get_num_inherited_fields(); - for (int i = 0; i < num_fields; ++i) { - DCField *field = get_inherited_field(i); - if (field->is_required() && field->as_molecular_field() == NULL) { - packer.begin_pack(field); - packer.pack_default_value(); - packer.end_pack(); - } - } - - return Datagram(packer.get_data(), packer.get_length()); -} -#endif // HAVE_PYTHON - -#ifdef HAVE_PYTHON -// TODO: remove this once Skyler has things working with the new server -//////////////////////////////////////////////////////////////////// -// Function: DCClass::ai_database_generate_context_old -// Access: Published -// Description: Generates a datagram containing the message necessary -// to create a new database distributed object from the AI. -// -// First Pass is to only incldue required values -// (with Defaults). -//////////////////////////////////////////////////////////////////// -Datagram DCClass:: -ai_database_generate_context_old( - unsigned int context_id, DOID_TYPE parent_id, ZONEID_TYPE zone_id, - CHANNEL_TYPE database_server_id, CHANNEL_TYPE from_channel_id) const -{ - DCPacker packer; - packer.raw_pack_uint8(1); - packer.RAW_PACK_CHANNEL(database_server_id); - packer.RAW_PACK_CHANNEL(from_channel_id); - //packer.raw_pack_uint8('A'); - packer.raw_pack_uint16(STATESERVER_OBJECT_CREATE_WITH_REQUIRED_CONTEXT); - packer.raw_pack_uint32(parent_id); - packer.raw_pack_uint32(zone_id); - packer.raw_pack_uint16(_number); // DCD class ID - packer.raw_pack_uint32(context_id); - - // Specify all of the required fields. - int num_fields = get_num_inherited_fields(); - for (int i = 0; i < num_fields; ++i) { - DCField *field = get_inherited_field(i); - if (field->is_required() && field->as_molecular_field() == NULL) { - packer.begin_pack(field); - packer.pack_default_value(); - packer.end_pack(); - } - } - - return Datagram(packer.get_data(), packer.get_length()); -} -#endif // HAVE_PYTHON //////////////////////////////////////////////////////////////////// // Function : DCClass::output diff --git a/direct/src/dcparser/dcClass.h b/direct/src/dcparser/dcClass.h index 8d2558a4d7..9ac09527ab 100644 --- a/direct/src/dcparser/dcClass.h +++ b/direct/src/dcparser/dcClass.h @@ -120,11 +120,6 @@ PUBLISHED: Datagram client_format_generate_CMU(PyObject *distobj, DOID_TYPE do_id, ZONEID_TYPE zone_id, PyObject *optional_fields) const; - Datagram ai_database_generate_context(unsigned int context_id, DOID_TYPE parent_id, ZONEID_TYPE zone_id, CHANNEL_TYPE owner_channel, - CHANNEL_TYPE database_server_id, CHANNEL_TYPE from_channel_id) const; - Datagram ai_database_generate_context_old(unsigned int context_id, DOID_TYPE parent_id, ZONEID_TYPE zone_id, - CHANNEL_TYPE database_server_id, CHANNEL_TYPE from_channel_id) const; - #endif public: diff --git a/direct/src/dcparser/dcField.cxx b/direct/src/dcparser/dcField.cxx index 7946b62aa1..52bf3a35b2 100644 --- a/direct/src/dcparser/dcField.cxx +++ b/direct/src/dcparser/dcField.cxx @@ -440,7 +440,7 @@ Datagram DCField:: client_format_update(DOID_TYPE do_id, PyObject *args) const { DCPacker packer; - packer.raw_pack_uint16(CLIENT_OBJECT_UPDATE_FIELD); + packer.raw_pack_uint16(CLIENT_OBJECT_SET_FIELD); packer.raw_pack_uint32(do_id); packer.raw_pack_uint16(_number); @@ -469,7 +469,7 @@ ai_format_update(DOID_TYPE do_id, CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyOb packer.raw_pack_uint8(1); packer.RAW_PACK_CHANNEL(to_id); packer.RAW_PACK_CHANNEL(from_id); - packer.raw_pack_uint16(STATESERVER_OBJECT_UPDATE_FIELD); + packer.raw_pack_uint16(STATESERVER_OBJECT_SET_FIELD); packer.raw_pack_uint32(do_id); packer.raw_pack_uint16(_number); diff --git a/direct/src/dcparser/dcmsgtypes.h b/direct/src/dcparser/dcmsgtypes.h index 0911a03585..06dbcde6b5 100755 --- a/direct/src/dcparser/dcmsgtypes.h +++ b/direct/src/dcparser/dcmsgtypes.h @@ -19,16 +19,13 @@ // It duplicates some symbols defined in MsgTypes.py and // AIMsgTypes.py. -#define CLIENT_OBJECT_UPDATE_FIELD 24 -#define CLIENT_CREATE_OBJECT_REQUIRED 34 -#define CLIENT_CREATE_OBJECT_REQUIRED_OTHER 35 +#define CLIENT_OBJECT_SET_FIELD 120 +#define CLIENT_ENTER_OBJECT_REQUIRED 142 +#define CLIENT_ENTER_OBJECT_REQUIRED_OTHER 143 -#define STATESERVER_OBJECT_GENERATE_WITH_REQUIRED 2001 -#define STATESERVER_OBJECT_GENERATE_WITH_REQUIRED_OTHER 2003 -#define STATESERVER_OBJECT_UPDATE_FIELD 2004 -#define STATESERVER_OBJECT_CREATE_WITH_REQUIRED_CONTEXT 2050 -#define STATESERVER_OBJECT_CREATE_WITH_REQUIR_OTHER_CONTEXT 2051 -#define STATESERVER_BOUNCE_MESSAGE 2086 +#define STATESERVER_CREATE_OBJECT_WITH_REQUIRED 2000 +#define STATESERVER_CREATE_OBJECT_WITH_REQUIRED_OTHER 2001 +#define STATESERVER_OBJECT_SET_FIELD 2020 #define CLIENT_OBJECT_GENERATE_CMU 9002 diff --git a/direct/src/distributed/AstronDatabaseInterface.py b/direct/src/distributed/AstronDatabaseInterface.py index de657f24e7..e5bdbc5626 100644 --- a/direct/src/distributed/AstronDatabaseInterface.py +++ b/direct/src/distributed/AstronDatabaseInterface.py @@ -52,7 +52,7 @@ class AstronDatabaseInterface: # Now generate and send the datagram: dg = PyDatagram() - dg.addServerHeader(databaseId, self.air.ourChannel, DBSERVER_OBJECT_CREATE) + dg.addServerHeader(databaseId, self.air.ourChannel, DBSERVER_CREATE_OBJECT) dg.addUint32(ctx) dg.addUint16(dclass.getNumber()) dg.addUint16(fieldCount) @@ -64,7 +64,7 @@ class AstronDatabaseInterface: doId = di.getUint32() if ctx not in self._callbacks: - self.notify.warning('Received unexpected DBSERVER_OBJECT_CREATE_RESP' + self.notify.warning('Received unexpected DBSERVER_CREATE_OBJECT_RESP' ' (ctx %d, doId %d)' % (ctx, doId)) return @@ -263,7 +263,7 @@ class AstronDatabaseInterface: self.air.contextAllocator.free(ctx) def handleDatagram(self, msgType, di): - if msgType == DBSERVER_OBJECT_CREATE_RESP: + if msgType == DBSERVER_CREATE_OBJECT_RESP: self.handleCreateObjectResp(di) elif msgType == DBSERVER_OBJECT_GET_ALL_RESP: self.handleQueryObjectResp(di) diff --git a/direct/src/distributed/AstronInternalRepository.py b/direct/src/distributed/AstronInternalRepository.py index 99f01b956f..3be40dd757 100644 --- a/direct/src/distributed/AstronInternalRepository.py +++ b/direct/src/distributed/AstronInternalRepository.py @@ -138,11 +138,13 @@ class AstronInternalRepository(ConnectionRepository): def handleDatagram(self, di): msgType = self.getMsgType() - if msgType == STATESERVER_OBJECT_ENTER_AI_RECV: - self.handleObjEntry(di) - elif msgType == STATESERVER_OBJECT_LEAVING_AI_INTEREST: + if msgType in (STATESERVER_OBJECT_ENTER_AI_WITH_REQUIRED, + STATESERVER_OBJECT_ENTER_AI_WITH_REQUIRED_OTHER): + self.handleObjEntry(di, msgType == STATESERVER_OBJECT_ENTER_AI_WITH_REQUIRED_OTHER) + elif msgType in (STATESERVER_OBJECT_CHANGING_AI, + STATESERVER_OBJECT_DELETE_RAM): self.handleObjExit(di) - elif msgType in (DBSERVER_OBJECT_CREATE_RESP, + elif msgType in (DBSERVER_CREATE_OBJECT_RESP, DBSERVER_OBJECT_GET_ALL_RESP, DBSERVER_OBJECT_SET_FIELD_IF_EQUALS_RESP, DBSERVER_OBJECT_SET_FIELDS_IF_EQUALS_RESP): @@ -150,11 +152,11 @@ class AstronInternalRepository(ConnectionRepository): else: self.notify.warning('Received message with unknown MsgType=%d' % msgType) - def handleObjEntry(self, di): + def handleObjEntry(self, di, other): + doId = di.getUint32() parentId = di.getUint32() zoneId = di.getUint32() classId = di.getUint16() - doId = di.getUint32() if classId not in self.dclassesByNumber: self.notify.warning('Received entry for unknown dclass=%d! (Object %d)' % (classId, doId)) @@ -175,7 +177,10 @@ class AstronInternalRepository(ConnectionRepository): # Now for generation: do.generate() - do.updateAllRequiredOtherFields(dclass, di) + if other: + do.updateAllRequiredOtherFields(dclass, di) + else: + do.updateAllRequiredFields(dclass, di) def handleObjExit(self, di): doId = di.getUint32() @@ -232,7 +237,7 @@ class AstronInternalRepository(ConnectionRepository): do.doId = doId self.addDOToTables(do, location=(parentId, zoneId)) - do.sendGenerateWithRequired(self, parentId or 1, zoneId, optionalFields) + do.sendGenerateWithRequired(self, parentId, zoneId, optionalFields) def requestDelete(self, do): """ @@ -276,7 +281,7 @@ class AstronInternalRepository(ConnectionRepository): # fall over and die. if self.serverId: dg = PyDatagram() - dg.addServerHeader(self.serverId, self.ourChannel, STATESERVER_SHARD_RESET) + dg.addServerHeader(self.serverId, self.ourChannel, STATESERVER_DELETE_AI_OBJECTS) dg.addChannel(self.ourChannel) self.addPostRemove(dg) diff --git a/direct/src/distributed/DoInterestManager.py b/direct/src/distributed/DoInterestManager.py index 560d5da379..67a8d20b8a 100755 --- a/direct/src/distributed/DoInterestManager.py +++ b/direct/src/distributed/DoInterestManager.py @@ -504,18 +504,23 @@ class DoInterestManager(DirectObject.DirectObject): 'trying to set interest to invalid parent: %s' % parentId) datagram = PyDatagram() # Add message type - datagram.addUint16(CLIENT_ADD_INTEREST) - datagram.addUint16(handle) - datagram.addUint32(contextId) - datagram.addUint32(parentId) if isinstance(zoneIdList, types.ListType): vzl = list(zoneIdList) vzl.sort() uniqueElements(vzl) + datagram.addUint16(CLIENT_ADD_INTEREST_MULTIPLE) + datagram.addUint32(contextId) + datagram.addUint16(handle) + datagram.addUint32(parentId) + datagram.addUint16(len(vzl)) for zone in vzl: datagram.addUint32(zone) else: - datagram.addUint32(zoneIdList) + datagram.addUint16(CLIENT_ADD_INTEREST) + datagram.addUint32(contextId) + datagram.addUint16(handle) + datagram.addUint32(parentId) + datagram.addUint32(zoneIdList) self.send(datagram) def _sendRemoveInterest(self, handle, contextId): @@ -530,9 +535,8 @@ class DoInterestManager(DirectObject.DirectObject): datagram = PyDatagram() # Add message type datagram.addUint16(CLIENT_REMOVE_INTEREST) + datagram.addUint32(contextId) datagram.addUint16(handle) - if contextId != 0: - datagram.addUint32(contextId) self.send(datagram) if __debug__: state = DoInterestManager._interests[handle] @@ -583,8 +587,8 @@ class DoInterestManager(DirectObject.DirectObject): This handles the interest done messages and may dispatch an event """ assert DoInterestManager.notify.debugCall() - handle = di.getUint16() contextId = di.getUint32() + handle = di.getUint16() if self.__verbose(): print 'CR::INTEREST.interestDone(handle=%s)' % handle DoInterestManager.notify.debug( diff --git a/direct/src/distributed/MsgTypes.py b/direct/src/distributed/MsgTypes.py index 5dae9462ab..f766647cff 100644 --- a/direct/src/distributed/MsgTypes.py +++ b/direct/src/distributed/MsgTypes.py @@ -6,121 +6,131 @@ MsgName2Id = { 'CLIENT_HELLO': 1, 'CLIENT_HELLO_RESP': 2, + # Sent by the client when it's leaving. + 'CLIENT_DISCONNECT': 3, + # Sent by the server when it is dropping the connection deliberately. - 'CLIENT_GO_GET_LOST': 4, + 'CLIENT_EJECT': 4, - 'CLIENT_OBJECT_UPDATE_FIELD': 24, - 'CLIENT_OBJECT_UPDATE_FIELD_RESP': 24, - 'CLIENT_OBJECT_DISABLE': 25, - 'CLIENT_OBJECT_DISABLE_RESP': 25, - 'CLIENT_OBJECT_DISABLE_OWNER': 26, - 'CLIENT_OBJECT_DISABLE_OWNER_RESP': 26, - 'CLIENT_OBJECT_DELETE': 27, - 'CLIENT_OBJECT_DELETE_RESP': 27, - 'CLIENT_SET_ZONE_CMU': 29, - 'CLIENT_REMOVE_ZONE': 30, - 'CLIENT_SET_AVATAR': 32, - 'CLIENT_CREATE_OBJECT_REQUIRED': 34, - 'CLIENT_CREATE_OBJECT_REQUIRED_RESP': 34, - 'CLIENT_CREATE_OBJECT_REQUIRED_OTHER': 35, - 'CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP': 35, - 'CLIENT_CREATE_OBJECT_REQUIRED_OTHER_OWNER': 36, - 'CLIENT_CREATE_OBJECT_REQUIRED_OTHER_OWNER_RESP':36, + 'CLIENT_HEARTBEAT': 5, - 'CLIENT_REQUEST_GENERATES': 36, + 'CLIENT_OBJECT_SET_FIELD': 120, + 'CLIENT_OBJECT_LEAVING': 132, + 'CLIENT_OBJECT_LEAVING_OWNER': 161, + 'CLIENT_ENTER_OBJECT_REQUIRED': 142, + 'CLIENT_ENTER_OBJECT_REQUIRED_OTHER': 143, + 'CLIENT_ENTER_OBJECT_REQUIRED_OTHER_OWNER': 173, - 'CLIENT_DISCONNECT': 37, + 'CLIENT_DONE_INTEREST_RESP': 204, - 'CLIENT_DONE_INTEREST_RESP': 48, - - 'CLIENT_HEARTBEAT': 52, - - 'CLIENT_SET_DOID_RANGE': 74, - - 'CLIENT_ADD_INTEREST': 97, - 'CLIENT_REMOVE_INTEREST': 99, - 'CLIENT_OBJECT_LOCATION': 102, + 'CLIENT_ADD_INTEREST': 200, + 'CLIENT_ADD_INTEREST_MULTIPLE': 201, + 'CLIENT_REMOVE_INTEREST': 203, + 'CLIENT_OBJECT_LOCATION': 140, # These are sent internally inside the Astron cluster. # Message Director control messages: - 'CONTROL_CHANNEL': 4001, - 'CONTROL_ADD_CHANNEL': 2001, - 'CONTROL_REMOVE_CHANNEL': 2002, - 'CONTROL_ADD_RANGE': 2008, - 'CONTROL_REMOVE_RANGE': 2009, - 'CONTROL_ADD_POST_REMOVE': 2010, - 'CONTROL_CLEAR_POST_REMOVE': 2011, + 'CONTROL_CHANNEL': 1, + 'CONTROL_ADD_CHANNEL': 9000, + 'CONTROL_REMOVE_CHANNEL': 9001, + 'CONTROL_ADD_RANGE': 9002, + 'CONTROL_REMOVE_RANGE': 9003, + 'CONTROL_ADD_POST_REMOVE': 9010, + 'CONTROL_CLEAR_POST_REMOVE': 9011, # State Server control messages: - 'STATESERVER_OBJECT_GENERATE_WITH_REQUIRED': 2001, - 'STATESERVER_OBJECT_GENERATE_WITH_REQUIRED_OTHER': 2003, - 'STATESERVER_OBJECT_UPDATE_FIELD': 2004, - 'STATESERVER_OBJECT_UPDATE_FIELD_MULTIPLE': 2005, - 'STATESERVER_OBJECT_DELETE_RAM': 2007, - 'STATESERVER_OBJECT_SET_ZONE': 2008, - 'STATESERVER_OBJECT_CHANGE_ZONE': 2009, - 'STATESERVER_OBJECT_LOCATE': 2022, - 'STATESERVER_OBJECT_LOCATE_RESP': 2023, - 'STATESERVER_OBJECT_SET_AI_CHANNEL': 2045, - 'STATESERVER_OBJECT_QUERY_ALL': 2020, - 'STATESERVER_OBJECT_QUERY_FIELD': 2024, - 'STATESERVER_OBJECT_QUERY_FIELD_RESP': 2062, - 'STATESERVER_OBJECT_QUERY_FIELDS': 2080, - 'STATESERVER_OBJECT_QUERY_FIELDS_RESP': 2081, - 'STATESERVER_OBJECT_QUERY_ALL_RESP': 2030, - 'STATESERVER_OBJECT_QUERY_ZONE_ALL': 2021, - 'STATESERVER_OBJECT_QUERY_ZONE_ALL_DONE': 2046, - 'STATESERVER_SHARD_RESET': 2061, - 'STATESERVER_OBJECT_ENTERZONE_WITH_REQUIRED': 2065, - 'STATESERVER_OBJECT_ENTERZONE_WITH_REQUIRED_OTHER': 2066, - 'STATESERVER_OBJECT_ENTER_AI_RECV': 2067, - 'STATESERVER_OBJECT_SET_OWNER_RECV': 2070, - 'STATESERVER_OBJECT_CHANGE_OWNER_RECV': 2069, - 'STATESERVER_OBJECT_ENTER_OWNER_RECV': 2068, - 'STATESERVER_OBJECT_LEAVING_AI_INTEREST': 2033, - 'STATESERVER_OBJECT_QUERY_MANAGING_AI': 2083, - 'STATESERVER_OBJECT_NOTIFY_MANAGING_AI': 2047, + 'STATESERVER_CREATE_OBJECT_WITH_REQUIRED': 2000, + 'STATESERVER_CREATE_OBJECT_WITH_REQUIRED_OTHER': 2001, + 'STATESERVER_DELETE_AI_OBJECTS': 2009, + 'STATESERVER_OBJECT_GET_FIELD': 2010, + 'STATESERVER_OBJECT_GET_FIELD_RESP': 2011, + 'STATESERVER_OBJECT_GET_FIELDS': 2012, + 'STATESERVER_OBJECT_GET_FIELDS_RESP': 2013, + 'STATESERVER_OBJECT_GET_ALL': 2014, + 'STATESERVER_OBJECT_GET_ALL_RESP': 2015, + 'STATESERVER_OBJECT_SET_FIELD': 2020, + 'STATESERVER_OBJECT_SET_FIELDS': 2021, + 'STATESERVER_OBJECT_DELETE_FIELD_RAM': 2030, + 'STATESERVER_OBJECT_DELETE_FIELDS_RAM': 2031, + 'STATESERVER_OBJECT_DELETE_RAM': 2032, + 'STATESERVER_OBJECT_SET_LOCATION': 2040, + 'STATESERVER_OBJECT_CHANGING_LOCATION': 2041, + 'STATESERVER_OBJECT_ENTER_LOCATION_WITH_REQUIRED': 2042, + 'STATESERVER_OBJECT_ENTER_LOCATION_WITH_REQUIRED_OTHER': 2043, + 'STATESERVER_OBJECT_GET_LOCATION': 2044, + 'STATESERVER_OBJECT_GET_LOCATION_RESP': 2045, + 'STATESERVER_OBJECT_SET_AI': 2050, + 'STATESERVER_OBJECT_CHANGING_AI': 2051, + 'STATESERVER_OBJECT_ENTER_AI_WITH_REQUIRED': 2052, + 'STATESERVER_OBJECT_ENTER_AI_WITH_REQUIRED_OTHER': 2053, + 'STATESERVER_OBJECT_GET_AI': 2054, + 'STATESERVER_OBJECT_GET_AI_RESP': 2055, + 'STATESERVER_OBJECT_SET_OWNER': 2060, + 'STATESERVER_OBJECT_CHANGING_OWNER': 2061, + 'STATESERVER_OBJECT_ENTER_OWNER_WITH_REQUIRED': 2062, + 'STATESERVER_OBJECT_ENTER_OWNER_WITH_REQUIRED_OTHER': 2063, + 'STATESERVER_OBJECT_GET_OWNER': 2064, + 'STATESERVER_OBJECT_GET_OWNER_RESP': 2065, + 'STATESERVER_OBJECT_GET_ZONE_OBJECTS': 2100, + 'STATESERVER_OBJECT_GET_ZONES_OBJECTS': 2102, + 'STATESERVER_OBJECT_GET_CHILDREN': 2104, + 'STATESERVER_OBJECT_GET_ZONE_COUNT': 2110, + 'STATESERVER_OBJECT_GET_ZONE_COUNT_RESP': 2111, + 'STATESERVER_OBJECT_GET_ZONES_COUNT': 2112, + 'STATESERVER_OBJECT_GET_ZONES_COUNT_RESP': 2113, + 'STATESERVER_OBJECT_GET_CHILD_COUNT': 2114, + 'STATESERVER_OBJECT_GET_CHILD_COUNT_RESP': 2115, + 'STATESERVER_OBJECT_DELETE_ZONE': 2120, + 'STATESERVER_OBJECT_DELETE_ZONES': 2122, + 'STATESERVER_OBJECT_DELETE_CHILDREN': 2124, + # DBSS-backed-object messages: + 'DBSS_OBJECT_ACTIVATE_WITH_DEFAULTS': 2200, + 'DBSS_OBJECT_ACTIVATE_WITH_DEFAULTS_OTHER': 2201, + 'DBSS_OBJECT_DELETE_FIELD_DISK': 2230, + 'DBSS_OBJECT_DELETE_FIELDS_DISK': 2231, + 'DBSS_OBJECT_DELETE_DISK': 2232, # Database Server control messages: - 'DBSERVER_OBJECT_CREATE': 4000, - 'DBSERVER_OBJECT_CREATE_RESP': 4001, - 'DBSERVER_OBJECT_DELETE': 4002, - 'DBSERVER_OBJECT_GET_FIELD': 4010, - 'DBSERVER_OBJECT_GET_FIELD_RESP': 4011, - 'DBSERVER_OBJECT_GET_FIELDS': 4012, - 'DBSERVER_OBJECT_GET_FIELDS_RESP': 4013, - 'DBSERVER_OBJECT_GET_ALL': 4014, - 'DBSERVER_OBJECT_GET_ALL_RESP': 4015, - 'DBSERVER_OBJECT_SET_FIELD': 4020, - 'DBSERVER_OBJECT_SET_FIELDS': 4021, - 'DBSERVER_OBJECT_SET_FIELD_IF_EQUALS': 4022, - 'DBSERVER_OBJECT_SET_FIELD_IF_EQUALS_RESP': 4023, - 'DBSERVER_OBJECT_SET_FIELDS_IF_EQUALS': 4024, - 'DBSERVER_OBJECT_SET_FIELDS_IF_EQUALS_RESP': 4025, - 'DBSERVER_OBJECT_SET_FIELD_IF_EMPTY': 4026, - 'DBSERVER_OBJECT_SET_FIELD_IF_EMPTY_RESP': 4027, - 'DBSERVER_OBJECT_DELETE_FIELD': 4030, - 'DBSERVER_OBJECT_DELETE_FIELDS': 4031, + 'DBSERVER_CREATE_OBJECT': 3000, + 'DBSERVER_CREATE_OBJECT_RESP': 3001, + 'DBSERVER_OBJECT_GET_FIELD': 3010, + 'DBSERVER_OBJECT_GET_FIELD_RESP': 3011, + 'DBSERVER_OBJECT_GET_FIELDS': 3012, + 'DBSERVER_OBJECT_GET_FIELDS_RESP': 3013, + 'DBSERVER_OBJECT_GET_ALL': 3014, + 'DBSERVER_OBJECT_GET_ALL_RESP': 3015, + 'DBSERVER_OBJECT_SET_FIELD': 3020, + 'DBSERVER_OBJECT_SET_FIELDS': 3021, + 'DBSERVER_OBJECT_SET_FIELD_IF_EQUALS': 3022, + 'DBSERVER_OBJECT_SET_FIELD_IF_EQUALS_RESP': 3023, + 'DBSERVER_OBJECT_SET_FIELDS_IF_EQUALS': 3024, + 'DBSERVER_OBJECT_SET_FIELDS_IF_EQUALS_RESP': 3025, + 'DBSERVER_OBJECT_SET_FIELD_IF_EMPTY': 3026, + 'DBSERVER_OBJECT_SET_FIELD_IF_EMPTY_RESP': 3027, + 'DBSERVER_OBJECT_DELETE_FIELD': 3030, + 'DBSERVER_OBJECT_DELETE_FIELDS': 3031, + 'DBSERVER_OBJECT_DELETE': 3032, # Client Agent control messages: - 'CLIENTAGENT_OPEN_CHANNEL': 3104, - 'CLIENTAGENT_CLOSE_CHANNEL': 3105, - 'CLIENTAGENT_ADD_INTEREST': 3106, - 'CLIENTAGENT_REMOVE_INTEREST': 3107, - 'CLIENTAGENT_ADD_POST_REMOVE': 3108, - 'CLIENTAGENT_CLEAR_POST_REMOVE': 3109, - 'CLIENTAGENT_DISCONNECT': 3101, - 'CLIENTAGENT_DROP': 3102, - 'CLIENTAGENT_SEND_DATAGRAM': 3100, - 'CLIENTAGENT_SET_SENDER_ID': 3103, - 'CLIENTAGENT_SET_STATE': 3110, - 'CLIENTAGENT_ADD_SESSION_OBJECT': 3112, - 'CLIENTAGENT_REMOVE_SESSION_OBJECT': 3113, - 'CLIENTAGENT_DECLARE_OBJECT': 3114, - 'CLIENTAGENT_UNDECLARE_OBJECT': 3115, - 'CLIENTAGENT_SET_FIELDS_SENDABLE': 3111, + 'CLIENTAGENT_SET_STATE': 1000, + 'CLIENTAGENT_SET_CLIENT_ID': 1001, + 'CLIENTAGENT_SEND_DATAGRAM': 1002, + 'CLIENTAGENT_EJECT': 1004, + 'CLIENTAGENT_DROP': 1005, + 'CLIENTAGENT_DECLARE_OBJECT': 1010, + 'CLIENTAGENT_UNDECLARE_OBJECT': 1011, + 'CLIENTAGENT_ADD_SESSION_OBJECT': 1012, + 'CLIENTAGENT_REMOVE_SESSION_OBJECT': 1013, + 'CLIENTAGENT_SET_FIELDS_SENDABLE': 1014, + 'CLIENTAGENT_OPEN_CHANNEL': 1100, + 'CLIENTAGENT_CLOSE_CHANNEL': 1101, + 'CLIENTAGENT_ADD_POST_REMOVE': 1110, + 'CLIENTAGENT_CLEAR_POST_REMOVES': 1111, + 'CLIENTAGENT_ADD_INTEREST': 1200, + 'CLIENTAGENT_ADD_INTEREST_MULTIPLE': 1201, + 'CLIENTAGENT_REMOVE_INTEREST': 1203, } # create id->name table for debugging diff --git a/direct/src/distributed/cConnectionRepository.cxx b/direct/src/distributed/cConnectionRepository.cxx index 240af9be5c..75bde7d1d0 100644 --- a/direct/src/distributed/cConnectionRepository.cxx +++ b/direct/src/distributed/cConnectionRepository.cxx @@ -343,8 +343,8 @@ check_datagram() { switch (_msg_type) { #ifdef HAVE_PYTHON - case CLIENT_OBJECT_UPDATE_FIELD: - case STATESERVER_OBJECT_UPDATE_FIELD: + case CLIENT_OBJECT_SET_FIELD: + case STATESERVER_OBJECT_SET_FIELD: if (_handle_c_updates) { if (_has_owner_view) { if (!handle_update_field_owner()) { @@ -533,7 +533,7 @@ send_message_bundle(unsigned int channel, unsigned int sender_channel) { dg.add_int8(1); dg.add_uint64(channel); dg.add_uint64(sender_channel); - dg.add_uint16(STATESERVER_BOUNCE_MESSAGE); + //dg.add_uint16(STATESERVER_BOUNCE_MESSAGE); // add each bundled message BundledMsgVector::const_iterator bmi; for (bmi = _bundle_msgs.begin(); bmi != _bundle_msgs.end(); bmi++) { @@ -966,11 +966,11 @@ describe_message(ostream &out, const string &prefix, packer.RAW_UNPACK_CHANNEL(); // msg_sender msg_type = packer.raw_unpack_uint16(); - is_update = (msg_type == STATESERVER_OBJECT_UPDATE_FIELD); + is_update = (msg_type == STATESERVER_OBJECT_SET_FIELD); } else { msg_type = packer.raw_unpack_uint16(); - is_update = (msg_type == CLIENT_OBJECT_UPDATE_FIELD); + is_update = (msg_type == CLIENT_OBJECT_SET_FIELD); } if (!is_update) { @@ -1122,7 +1122,7 @@ bool CConnectionRepository::check_datagram_ai(PyObject *PycallBackFunction) _msg_sender = _di.get_uint64(); _msg_type = _di.get_uint16(); - if( _msg_type == STATESERVER_OBJECT_UPDATE_FIELD) + if( _msg_type == STATESERVER_OBJECT_SET_FIELD) { if(doId2do == NULL) { diff --git a/direct/src/distributed/cDistributedSmoothNodeBase.cxx b/direct/src/distributed/cDistributedSmoothNodeBase.cxx index 1f2518f1d3..83f3033f56 100644 --- a/direct/src/distributed/cDistributedSmoothNodeBase.cxx +++ b/direct/src/distributed/cDistributedSmoothNodeBase.cxx @@ -298,12 +298,12 @@ begin_send_update(DCPacker &packer, const string &field_name) { packer.RAW_PACK_CHANNEL(_do_id); packer.RAW_PACK_CHANNEL(_ai_id); //packer.raw_pack_uint8('A'); - packer.raw_pack_uint16(STATESERVER_OBJECT_UPDATE_FIELD); + packer.raw_pack_uint16(STATESERVER_OBJECT_SET_FIELD); packer.raw_pack_uint32(_do_id); packer.raw_pack_uint16(field->get_number()); } else { - packer.raw_pack_uint16(CLIENT_OBJECT_UPDATE_FIELD); + packer.raw_pack_uint16(CLIENT_OBJECT_SET_FIELD); packer.raw_pack_uint32(_do_id); packer.raw_pack_uint16(field->get_number()); }