OSCDocumenter.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 
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

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