mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
toggle_verbose()
This commit is contained in:
parent
4db8187483
commit
83405c4857
@ -154,6 +154,7 @@ PUBLISHED:
|
|||||||
// this is a hack to allw me to get in and out of 32bit Mode Faster
|
// 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
|
// need to agree with channel_type in dcbase.h
|
||||||
#define RAW_PACK_CHANNEL(in) raw_pack_uint64(in)
|
#define RAW_PACK_CHANNEL(in) raw_pack_uint64(in)
|
||||||
|
#define RAW_UNPACK_CHANNEL() raw_unpack_uint64()
|
||||||
|
|
||||||
|
|
||||||
INLINE int raw_unpack_int8();
|
INLINE int raw_unpack_int8();
|
||||||
|
@ -217,3 +217,45 @@ INLINE bool CConnectionRepository::
|
|||||||
get_simulated_disconnect() const {
|
get_simulated_disconnect() const {
|
||||||
return _simulated_disconnect;
|
return _simulated_disconnect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: CConnectionRepository::toggle_verbose
|
||||||
|
// Access: Published
|
||||||
|
// Description: Toggles the current setting of the verbose flag.
|
||||||
|
// When true, this describes every message going back
|
||||||
|
// and forth on the wire.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE void CConnectionRepository::
|
||||||
|
toggle_verbose() {
|
||||||
|
_verbose = !_verbose;
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: CConnectionRepository::set_verbose
|
||||||
|
// Access: Published
|
||||||
|
// Description: Directly sets the verbose flag. When true, this
|
||||||
|
// describes every message going back and forth on the
|
||||||
|
// wire.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE void CConnectionRepository::
|
||||||
|
set_verbose(bool verbose) {
|
||||||
|
_verbose = verbose;
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: CConnectionRepository::get_verbose
|
||||||
|
// Access: Published
|
||||||
|
// Description: Returns the current setting of the verbose flag.
|
||||||
|
// When true, this describes every message going back
|
||||||
|
// and forth on the wire.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE bool CConnectionRepository::
|
||||||
|
get_verbose() const {
|
||||||
|
return _verbose;
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "cConnectionRepository.h"
|
#include "cConnectionRepository.h"
|
||||||
#include "dcmsgtypes.h"
|
#include "dcmsgtypes.h"
|
||||||
#include "dcClass.h"
|
#include "dcClass.h"
|
||||||
|
#include "dcPacker.h"
|
||||||
|
|
||||||
#include "config_distributed.h"
|
#include "config_distributed.h"
|
||||||
#include "httpChannel.h"
|
#include "httpChannel.h"
|
||||||
@ -53,6 +54,7 @@ CConnectionRepository() :
|
|||||||
#endif
|
#endif
|
||||||
_client_datagram(true),
|
_client_datagram(true),
|
||||||
_simulated_disconnect(false),
|
_simulated_disconnect(false),
|
||||||
|
_verbose(distributed_cat.is_spam()),
|
||||||
_msg_channel(0),
|
_msg_channel(0),
|
||||||
_msg_sender(0),
|
_msg_sender(0),
|
||||||
_sec_code(0),
|
_sec_code(0),
|
||||||
@ -135,6 +137,12 @@ check_datagram() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (do_check_datagram()) {
|
while (do_check_datagram()) {
|
||||||
|
#ifndef NDEBUG
|
||||||
|
if (get_verbose()) {
|
||||||
|
describe_message(nout, "receive ", _dg.get_message());
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
// Start breaking apart the datagram.
|
// Start breaking apart the datagram.
|
||||||
_di = DatagramIterator(_dg);
|
_di = DatagramIterator(_dg);
|
||||||
|
|
||||||
@ -238,6 +246,12 @@ send_datagram(const Datagram &dg) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
if (get_verbose()) {
|
||||||
|
describe_message(nout, "send ", dg.get_message());
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
#ifdef HAVE_NSPR
|
#ifdef HAVE_NSPR
|
||||||
if (_nspr_conn) {
|
if (_nspr_conn) {
|
||||||
_cw.send(dg, _nspr_conn);
|
_cw.send(dg, _nspr_conn);
|
||||||
@ -425,3 +439,92 @@ handle_update_field() {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: CConnectionRepository::describe_message
|
||||||
|
// Access: Private
|
||||||
|
// Description: Unpacks the message and reformats it for user
|
||||||
|
// consumption, writing a description on the indicated
|
||||||
|
// output stream.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void CConnectionRepository::
|
||||||
|
describe_message(ostream &out, const string &prefix,
|
||||||
|
const string &message_data) const {
|
||||||
|
DCPacker packer;
|
||||||
|
packer.set_unpack_data(message_data);
|
||||||
|
CHANNEL_TYPE do_id;
|
||||||
|
int msg_type;
|
||||||
|
bool is_update = false;
|
||||||
|
|
||||||
|
if (!_client_datagram) {
|
||||||
|
packer.RAW_UNPACK_CHANNEL(); // msg_channel
|
||||||
|
packer.RAW_UNPACK_CHANNEL(); // msg_sender
|
||||||
|
packer.raw_unpack_uint8(); // sec_code
|
||||||
|
msg_type = packer.raw_unpack_uint16();
|
||||||
|
is_update = (msg_type == STATESERVER_OBJECT_UPDATE_FIELD);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
msg_type = packer.raw_unpack_uint16();
|
||||||
|
is_update = (msg_type == CLIENT_OBJECT_UPDATE_FIELD);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_update) {
|
||||||
|
out << prefix << "message " << msg_type << "\n";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// It's an update message. Figure out what dclass the object is
|
||||||
|
// based on its doId, so we can decode the rest of the message.
|
||||||
|
do_id = packer.raw_unpack_uint32();
|
||||||
|
DCClass *dclass = NULL;
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
if (_python_repository != (PyObject *)NULL) {
|
||||||
|
PyObject *doId2do =
|
||||||
|
PyObject_GetAttrString(_python_repository, "doId2do");
|
||||||
|
nassertv(doId2do != NULL);
|
||||||
|
|
||||||
|
PyObject *doId = PyInt_FromLong(do_id);
|
||||||
|
PyObject *distobj = PyDict_GetItem(doId2do, doId);
|
||||||
|
Py_DECREF(doId);
|
||||||
|
Py_DECREF(doId2do);
|
||||||
|
|
||||||
|
if (distobj != NULL) {
|
||||||
|
PyObject *dclass_obj = PyObject_GetAttrString(distobj, "dclass");
|
||||||
|
nassertv(dclass_obj != NULL);
|
||||||
|
|
||||||
|
PyObject *dclass_this = PyObject_GetAttrString(dclass_obj, "this");
|
||||||
|
Py_DECREF(dclass_obj);
|
||||||
|
nassertv(dclass_this != NULL);
|
||||||
|
|
||||||
|
dclass = (DCClass *)PyInt_AsLong(dclass_this);
|
||||||
|
Py_DECREF(dclass_this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // HAVE_PYTHON
|
||||||
|
|
||||||
|
int field_id = packer.raw_unpack_uint16();
|
||||||
|
|
||||||
|
if (dclass == (DCClass *)NULL) {
|
||||||
|
out << prefix << "update for unknown object " << do_id
|
||||||
|
<< ", field " << field_id << "\n";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
out << prefix << "update for " << dclass->get_name()
|
||||||
|
<< " " << do_id << ": ";
|
||||||
|
if (field_id < 0 || field_id >= dclass->get_num_inherited_fields()) {
|
||||||
|
out << "unknown field " << field_id << "\n";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
DCField *field = dclass->get_inherited_field(field_id);
|
||||||
|
out << field->get_name();
|
||||||
|
packer.begin_unpack(field);
|
||||||
|
packer.unpack_and_format(out);
|
||||||
|
packer.end_unpack();
|
||||||
|
out << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
|
@ -100,10 +100,21 @@ PUBLISHED:
|
|||||||
INLINE void set_simulated_disconnect(bool simulated_disconnect);
|
INLINE void set_simulated_disconnect(bool simulated_disconnect);
|
||||||
INLINE bool get_simulated_disconnect() const;
|
INLINE bool get_simulated_disconnect() const;
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
INLINE void toggle_verbose();
|
||||||
|
INLINE void set_verbose(bool verbose);
|
||||||
|
INLINE bool get_verbose() const;
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool do_check_datagram();
|
bool do_check_datagram();
|
||||||
bool handle_update_field();
|
bool handle_update_field();
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
void describe_message(ostream &out, const string &prefix,
|
||||||
|
const string &message_data) const;
|
||||||
|
#endif // NDEBUG
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
PyObject *_python_repository;
|
PyObject *_python_repository;
|
||||||
#endif
|
#endif
|
||||||
@ -122,6 +133,7 @@ private:
|
|||||||
DCFile _dc_file;
|
DCFile _dc_file;
|
||||||
bool _client_datagram;
|
bool _client_datagram;
|
||||||
bool _simulated_disconnect;
|
bool _simulated_disconnect;
|
||||||
|
bool _verbose;
|
||||||
|
|
||||||
Datagram _dg;
|
Datagram _dg;
|
||||||
DatagramIterator _di;
|
DatagramIterator _di;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user