OSCBundleHandler.h

00001 /* Open SoundControl kit in C++                                              */
00002 /* Copyright (C) 2002-2004 libOSC++ contributors. See AUTHORS                */
00003 /*                                                                           */
00004 /* This library is free software; you can redistribute it and/or             */
00005 /* modify it under the terms of the GNU Lesser General Public                */
00006 /* License as published by the Free Software Foundation; either              */
00007 /* version 2.1 of the License, or (at your option) any later version.        */
00008 /*                                                                           */
00009 /* This library is distributed in the hope that it will be useful,           */
00010 /* but WITHOUT ANY WARRANTY; without even the implied warranty of            */
00011 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         */
00012 /* Lesser General Public License for more details.                           */
00013 /*                                                                           */
00014 /* You should have received a copy of the GNU Lesser General Public          */
00015 /* License along with this library; if not, write to the Free Software       */
00016 /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
00017 /*                                                                           */
00018 /* For questions regarding this program contact                              */
00019 /* Daniel Holth <dholth@fastmail.fm> or visit                                */
00020 /* http://wiretap.stetson.edu/                                               */
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       // DEBUG
00070       u.unpackString(&queryAddress);               // Probably #bundle
00071       std::cout << "Bundle: " << queryAddress << std::endl;
00072       // END DEBUG
00073 
00074       u.skipHyper();                  // Ignore 8-byte time tag
00075       
00076       processor = this->getProcessor();
00077 
00078       success = true;
00079 
00080       while (success)
00081       {
00082         success = u.unpackBlob(&itemData);
00083         if(success)
00084         {
00085           // DEBUG
00086           item.setData(itemData);
00087           item.unpackString(&itemAddress);
00088           std::cout << "Bundle item: " << itemAddress << std::endl;
00089           // END DEBUG
00090           
00091           processor->process(itemData, replier);
00092         }
00093       }
00094     };
00095 };
00096 
00097 #endif

Generated on Thu Mar 2 23:51:35 2006 for libOSC++ by  doxygen 1.4.6