00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00034 #ifndef OSCBUNDLE_HANDLER_H
00035 #define OSCBUNDLE_HANDLER_H
00036
00037 #include "OSCPacker.h"
00038 #include "OSCUnpacker.h"
00039 #include "OSCNamespace.h"
00040 #include "OSCCallable.h"
00041 #include "OSCProcessor.h"
00042
00043 class OSCBundleHandler : public OSCCallable
00044 {
00045 private:
00046 OSCProcessor* myProcessor;
00047 protected:
00048 OSCProcessor* getProcessor() { return this->myProcessor; }
00049 public:
00050 OSCBundleHandler() { }
00051 virtual ~OSCBundleHandler() { }
00052
00054
00055 void setProcessor(OSCProcessor *p) { this->myProcessor = p; }
00056
00057 void call(const std::string& data, Transmit *const replier)
00058 {
00059 bool success;
00060 std::string queryAddress;
00061 std::string itemAddress;
00062 std::string itemData;
00063 OSCProcessor *processor;
00064 OSCUnpacker u;
00065 OSCUnpacker item;
00066
00067 u.setData(data);
00068
00069
00070 u.unpackString(&queryAddress);
00071 std::cout << "Bundle: " << queryAddress << std::endl;
00072
00073
00074 u.skipHyper();
00075
00076 processor = this->getProcessor();
00077
00078 success = true;
00079
00080 while (success)
00081 {
00082 success = u.unpackBlob(&itemData);
00083 if(success)
00084 {
00085
00086 item.setData(itemData);
00087 item.unpackString(&itemAddress);
00088 std::cout << "Bundle item: " << itemAddress << std::endl;
00089
00090
00091 processor->process(itemData, replier);
00092 }
00093 }
00094 };
00095 };
00096
00097 #endif