OSCTypeReturner.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 
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;  // DEBUG
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         // Is this the best approach for an error? (may confuse the recipient)
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

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