00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00033 #ifndef OSCTYPE_RETURNER_H
00034 #define OSCTYPE_RETURNER_H
00035
00036 #include "OSCPacker.h"
00037 #include "OSCUnpacker.h"
00038 #include "OSCNamespace.h"
00039 #include "OSCCallable.h"
00040
00041 using namespace std;
00042
00043 class OSCTypeReturner : public OSCCallable
00044 {
00045 private:
00046 OSCNamespace *mySpace;
00047 protected:
00048 OSCNamespace* getNamespace() { return this->mySpace; }
00049 public:
00050 OSCTypeReturner() { }
00051 virtual ~OSCTypeReturner() { }
00052
00053 void setNamespace(OSCNamespace *space) { this->mySpace = space; }
00054
00055 void call(const std::string& data, Transmit *const replier)
00056 {
00057 std::string queryAddress;
00058 std::string typeSignature;
00059 std::string reply;
00060 OSCNamespace *space;
00061 OSCCallable *queryItem;
00062 OSCUnpacker u;
00063 OSCPacker p;
00064
00065 u.setData(data);
00066 u.unpackString(&queryAddress);
00067 u.unpackString(&queryAddress);
00068 u.unpackString(&queryAddress);
00069
00070 cout << "Type Signature request on: " << queryAddress << endl;
00071 space = this->getNamespace();
00072 queryItem = space->find(queryAddress);
00073
00074 if(queryItem != NULL)
00075 {
00076 typeSignature = queryItem->getTypeSignature();
00077 p.packString("/typeSig");
00078 p.packString(",ss");
00079 p.packString(queryAddress.c_str());
00080 p.packString(typeSignature.c_str());
00081 }
00082 else
00083 {
00084
00085 p.packString("/typeSig");
00086 p.packString(",s");
00087 p.packString("item not found");
00088 }
00089
00090 reply = p.getData();
00091 replier->transmit(reply);
00092 };
00093 };
00094
00095 #endif