[Bf-committers] MessageSensor getSubject() Bug

Carsten Wartmann bf-committers@blender.org
Tue, 6 Apr 2004 18:01:44 +0200


Hi,

this is my first try to fix a bug, so be kind with me ;-) I have to
say its even the first time I put my hands on C++...


The bug:

In NaN times I suggested a python function to get the subject of a
Message using a python function of the MessageSensor. 

Thats a nice thing if you want complex message handling in one python
script. Just get all messages, check the subject and do what you
want. In the current situation you end up with several MessageSensors
connected to the python script, instead of one Sensor and a smart
script.

Some developer (cant remember who) did implement that function, but
however not the way I wanted (maybe I was not clear enough) ;-) So the
getSubject() function will return whats entered in the "Subject:"
filter field of the MessageSensor. Quite useless IMHO.

So I added a new function getSubjects() which is similar to
getBodies(), in fact I stole the code from there ;-)

I left the getSubject() alone, because of backward compatibility
(never saw someone using that function, but...)


The future:

In conjunction with a wildcard subject: filter field the getSubjects()
function will be even more usefull.

i.e. Player* will filter for PlayerScore, PlayerKill etc.



Here is the patch, it works here but no guaranties I did not broke the
whole world ;-)

Regards,
Carsten.


? .sconsign
? .tm_project.cache
? blender
? blender.prj
? blender.pws
? config.opts
? extern/qhull/include/qhull/.sconsign
? extern/qhull/src/.sconsign
? extern/solid/SOLID/.sconsign
? extern/solid/include/.sconsign
? extern/solid/include/MT/.sconsign
? extern/solid/src/.sconsign
? extern/solid/src/broad/.sconsign
? extern/solid/src/complex/.sconsign
? extern/solid/src/convex/.sconsign
? intern/SoundSystem/.sconsign
? intern/SoundSystem/dummy/.sconsign
? intern/SoundSystem/intern/.sconsign
? intern/SoundSystem/openal/.sconsign
? intern/bmfont/.sconsign
? intern/bmfont/intern/.sconsign
? intern/bsp/extern/.sconsign
? intern/bsp/intern/.sconsign
? intern/container/.sconsign
? intern/container/intern/.sconsign
? intern/decimation/extern/.sconsign
? intern/decimation/intern/.sconsign
? intern/ghost/.sconsign
? intern/ghost/intern/.sconsign
? intern/guardedalloc/.sconsign
? intern/guardedalloc/intern/.sconsign
? intern/iksolver/extern/.sconsign
? intern/iksolver/intern/.sconsign
? intern/iksolver/intern/TNT/.sconsign
? intern/memutil/.sconsign
? intern/memutil/intern/.sconsign
? intern/moto/include/.sconsign
? intern/moto/intern/.sconsign
? intern/string/.sconsign
? intern/string/intern/.sconsign
? source/blender/avi/.sconsign
? source/blender/avi/intern/.sconsign
? source/blender/blenkernel/.sconsign
? source/blender/blenkernel/intern/.sconsign
? source/blender/blenlib/.sconsign
? source/blender/blenlib/intern/.sconsign
? source/blender/blenloader/.sconsign
? source/blender/blenloader/intern/.sconsign
? source/blender/blenpluginapi/.sconsign
? source/blender/blenpluginapi/intern/.sconsign
? source/blender/deflate/.sconsign
? source/blender/deflate/intern/.sconsign
? source/blender/imbuf/.sconsign
? source/blender/imbuf/intern/.sconsign
? source/blender/img/.sconsign
? source/blender/img/intern/.sconsign
? source/blender/include/.sconsign
? source/blender/inflate/.sconsign
? source/blender/inflate/intern/.sconsign
? source/blender/makesdna/.sconsign
? source/blender/makesdna/intern/.sconsign
? source/blender/python/.sconsign
? source/blender/python/api2_2x/.sconsign
? source/blender/quicktime/.sconsign
? source/blender/radiosity/extern/include/.sconsign
? source/blender/radiosity/intern/source/.sconsign
? source/blender/readblenfile/.sconsign
? source/blender/readblenfile/intern/.sconsign
? source/blender/readstreamglue/.sconsign
? source/blender/readstreamglue/intern/.sconsign
? source/blender/render/extern/include/.sconsign
? source/blender/render/intern/include/.sconsign
? source/blender/render/intern/source/.sconsign
? source/blender/renderconverter/.sconsign
? source/blender/renderconverter/intern/.sconsign
? source/blender/src/.sconsign
? source/blender/writeblenfile/.sconsign
? source/blender/writeblenfile/intern/.sconsign
? source/blender/writestreamglue/.sconsign
? source/blender/writestreamglue/intern/.sconsign
? source/blender/yafray/.sconsign
? source/blender/yafray/intern/.sconsign
? source/creator/.sconsign
? source/gameengine/BlenderRoutines/.sconsign
? source/gameengine/Converter/.sconsign
? source/gameengine/Expressions/.sconsign
? source/gameengine/GameLogic/.sconsign
? source/gameengine/Ketsji/.sconsign
? source/gameengine/Ketsji/KXNetwork/.sconsign
? source/gameengine/Network/.sconsign
? source/gameengine/Network/LoopBackNetwork/.sconsign
? source/gameengine/Physics/BlOde/.sconsign
? source/gameengine/Physics/Dummy/.sconsign
? source/gameengine/Physics/Sumo/.sconsign
? source/gameengine/Physics/Sumo/Fuzzics/include/.sconsign
? source/gameengine/Physics/Sumo/Fuzzics/src/.sconsign
? source/gameengine/Physics/common/.sconsign
? source/gameengine/Rasterizer/.sconsign
? source/gameengine/Rasterizer/RAS_OpenGLRasterizer/.sconsign
? source/gameengine/SceneGraph/.sconsign
? source/kernel/gen_messaging/.sconsign
? source/kernel/gen_messaging/intern/.sconsign
? source/kernel/gen_system/.sconsign
Index: source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
===================================================================
RCS file:
/cvsroot/bf-blender/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp,v
retrieving revision 1.4
diff -u -r1.4 KX_NetworkMessageSensor.cpp
--- source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
22 Mar 2004 22:01:50 -0000	1.4
+++ source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
6 Apr 2004 15:54:52 -0000
@@ -62,7 +62,9 @@
     m_subject(subject),
     m_frame_message_count (0),
     m_IsUp(false),
-    m_BodyList(NULL)
+    m_BodyList(NULL),
+    m_SubjectList(NULL)
+
 {
 }
 
@@ -95,6 +97,11 @@
	 m_BodyList = NULL;
	 }
 
+	if (m_SubjectList) {
+	   m_SubjectList->Release();
+		m_SubjectList = NULL;
+		}
+
	STR_String toname=GetParent()->GetName();
	STR_String subject = this->m_subject;
 
@@ -109,6 +116,8 @@
 #endif
		m_IsUp = true;
		       m_BodyList = new CListValue();
+				  m_SubjectList = new CListValue();
+						      
						      }
 
	vector<NG_NetworkMessage*>::iterator mesit;
@@ -116,13 +125,20 @@
   {
	// save the body
	   STR_String body = (*mesit)->GetMessageText();
+		      // save the subject
+			 STR_String messub = (*mesit)->GetSubject();
+
 #ifdef NAN_NET_DEBUG
		if (body) {
			  cout << "body [" << body << "]\n";
			       }
 #endif
+
		m_BodyList->Add(new CStringValue(body,"body"));
 
+		// Store Subject
+		   m_SubjectList->Add(new
CStringValue(messub,"subject"));
+		
			// free the message
			   (*mesit)->Release();
			   }
@@ -186,6 +202,9 @@
   {"getSubject", (PyCFunction)
		  KX_NetworkMessageSensor::sPyGetSubject,
METH_VARARGS,
		GetSubject_doc},
+		{"getSubjects", (PyCFunction)
+
KX_NetworkMessageSensor::sPyGetSubjects, METH_VARARGS,
+						GetSubjects_doc},
						{NULL,NULL} //Sentinel
 };
 
@@ -243,10 +262,10 @@
   Py_Return;
 }
 
-// 4. Get the message subject
+// 4. Get the message subject: field of MessageSensor
 char KX_NetworkMessageSensor::GetSubject_doc[] =
 "\tgetSubject()\n"
-"\tGet the subject of the message.\n";
+"\tGet the subject: field of the Sensor.\n";
 
 PyObject* KX_NetworkMessageSensor::PyGetSubject(
	   PyObject* self,
@@ -254,9 +273,25 @@
   PyObject* kwds)
 {
	if (m_subject) {
-	   return PyString_FromString(m_subject);
+	     return PyString_FromString(m_subject);
	     }
 
	Py_Return;
 }
 
+// 5. Get the message subjects
+char KX_NetworkMessageSensor::GetSubjects_doc[] =
+"\tgetSubjects()\n"
+"\tGet list of message subjects.\n";
+
+PyObject* KX_NetworkMessageSensor::PyGetSubjects(
+	   PyObject* self,
+	   PyObject* args,
+	   PyObject* kwds)
+{
+	if (m_SubjectList) {
+	  return ((PyObject*) m_SubjectList->AddRef());
+	  }
+
+	Py_Return;
+}
Index: source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
===================================================================
RCS file:
/cvsroot/bf-blender/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h,v
retrieving revision 1.6
diff -u -r1.6 KX_NetworkMessageSensor.h
--- source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
22 Mar 2004 22:01:50 -0000	1.6
+++ source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
6 Apr 2004 15:54:52 -0000
@@ -54,6 +54,8 @@
   bool m_IsUp;
 
	class CListValue* m_BodyList;
+	class CListValue* m_SubjectList;
+
 public:
	KX_NetworkMessageSensor(
		KX_NetworkEventManager* eventmgr,	// our
eventmanager
@@ -79,6 +81,7 @@
   KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetFrameMessageCount);
   KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetBodies);
   KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetSubject);
+  KX_PYMETHOD_DOC(KX_NetworkMessageSensor, GetSubjects);
 
 
 };