00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef OSCDOCUMENTOR_H
00023 #define OSCDOCUMENTOR_H
00024
00025 #include "OSCPacker.h"
00026 #include "OSCUnpacker.h"
00027 #include "OSCNamespace.h"
00028 #include "OSCCallable.h"
00029
00030 #ifdef DEBUG
00031 #include <iostream>
00032 using namespace std;
00033 #endif
00034
00044 class OSCDocumentor : public OSCCallable
00045 {
00046 private:
00047 OSCNamespace *mySpace;
00048 protected:
00049 OSCNamespace* getNamespace() { return this->mySpace; }
00050 public:
00051 OSCDocumentor() { }
00052 virtual ~OSCDocumentor() { }
00053
00054 void setNamespace(OSCNamespace *space) { this->mySpace = space; }
00055
00057 void call(const std::string& data, Transmit *const replier)
00058 {
00059 std::string queryAddress;
00060 std::string docstring;
00061 std::string reply;
00062 OSCNamespace *space;
00063 OSCCallable *queryItem;
00064 OSCUnpacker u;
00065 OSCPacker p;
00066
00067 u.setData(data);
00068 u.unpackString(&queryAddress);
00069 u.unpackString(&queryAddress);
00070 u.unpackString(&queryAddress);
00071
00072 #ifdef DEBUG
00073 cout << "Doc query on " << queryAddress << endl;
00074 #endif
00075 space = this->getNamespace();
00076 queryItem = space->find(queryAddress);
00077
00078 if(queryItem != NULL)
00079 {
00080 docstring = queryItem->getDocumentation();
00081 p.packString("/documented");
00082 p.packString(",s");
00083 p.packString(docstring.c_str());
00084 }
00085 else
00086 {
00087 p.packString("/documented");
00088 p.packString(",s");
00089 p.packString("item not found");
00090 }
00091
00092 reply = p.getData();
00093 replier->transmit(reply);
00094 };
00095 };
00096
00097 #endif