\r
#include STL_STRING\r
#include <stdexcept>\r
+#include <map>\r
\r
SG_USING_STD(string);\r
SG_USING_STD(invalid_argument);\r
+SG_USING_STD(map);\r
\r
#include "messagebuf.hxx"\r
\r
\r
#define FGMPSMsgElementArrayEnd {fgmps_null, 0}\r
\r
+class FGMPSMessage;\r
+\r
+typedef FGMPSMessage* FGMPSMessagePtr;\r
+typedef FGMPSMessagePtr (*FGMPSMsgInstanceFunc)(void);\r
+\r
+typedef map<unsigned int, FGMPSMsgInstanceFunc> FGMPSInstanceFuncMap;\r
+\r
class FGMPSMessage\r
{\r
private:\r
+ static FGMPSInstanceFuncMap funcmap;\r
FGMPSMsgElementEntry elements[1];\r
- static unsigned int msgid;\r
protected:\r
- FGMPSMessageBuf msg;\r
+ FGMPSMessageBuf buf;\r
+ unsigned int msgid;\r
public:\r
+ static int registermsg(int msgid, FGMPSMsgInstanceFunc func)\r
+ {\r
+ funcmap[msgid] = func;\r
+ }\r
+\r
FGMPSMessage();\r
~FGMPSMessage() {}\r
\r
- virtual string encodemsg() {}\r
- virtual FGMPSMessage* decodemsg(string msg) {}\r
- virtual FGMPSMsgElementEntry* getelements() { return elements; }\r
- virtual unsigned int getmessageid() { return msgid; }\r
+ string encodemsg();\r
+ static FGMPSMessage* decodemsg(string msg);\r
+ unsigned int getmessageid() { return msgid; }\r
\r
+ virtual FGMPSMsgElementEntry* getelements() { return elements; }\r
};\r
\r
#endif\r