00001 /***************************** License ********************************** 00002 00003 Copyright (C) 2008 by Communicative Machines 00004 http://www.cmlabs.com All rights reserved. 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Lesser General Public 00008 License as published by the Free Software Foundation; either 00009 version 2.1 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Lesser General Public License for more details. 00015 00016 You should have received a copy of the GNU Lesser General Public 00017 License along with this library; if not, write to the Free Software 00018 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 00020 ************************************************************************/ 00021 00022 00023 // ObjectRequestQueue.h: interface for the ObjectRequestQueue class. 00024 // 00025 ////////////////////////////////////////////////////////////////////// 00026 00027 #if !defined(AFX_OBJECTREQUESTQUEUE_H__D8862297_CBBA_405D_8011_F7F570CC14F4__INCLUDED_) 00028 #define AFX_OBJECTREQUESTQUEUE_H__D8862297_CBBA_405D_8011_F7F570CC14F4__INCLUDED_ 00029 00030 #if _MSC_VER > 1000 00031 #pragma once 00032 #endif // _MSC_VER > 1000 00033 00034 #include "Object.h" 00035 #include "ObjectQueue.h" 00036 #include "RequestQueue.h" 00037 00038 namespace cmlabs { 00039 00040 class ObjectRequestQueue : public Object 00041 { 00042 public: 00043 ObjectRequestQueue(); 00044 virtual ~ObjectRequestQueue(); 00045 00046 // Requesting side 00047 00048 Object* clone() const {return NULL;} 00049 JString enterRequest(Object* req); 00050 Object* waitForReply(JString id, long ms); 00051 //! Get total size of payload 00052 virtual unsigned long getPayloadSize() const; 00053 00054 00055 // Replying side 00056 00057 bool isEmpty(); 00058 int getCount(); 00059 00060 bool waitForNewRequestToAppear(int ms); 00061 JString waitForNewRequestID(int ms); 00062 Object* getRequest(JString id); 00063 bool reply(JString id, Object* rep); 00064 00065 // *************************************************************** 00066 // Binary Functions 00067 // *************************************************************** 00068 00069 //! Get the size of binary data chunk, -1 for all chunks 00070 long getBinarySize(int chunk); 00071 //! Get the number of data chunks 00072 int getBinaryChunkCount(); 00073 //! Write binary data to buffer at chunk number 'chunk' 00074 long toBinaryBuffer(int chunk, char* buffer, int maxlen); 00075 //! Set the data after separate reception 00076 bool fromBinaryBuffer(int chunk, char* buffer, long len); 00077 00078 bool unitTest(); 00079 00080 ObjectQueue* inQueue; 00081 ObjectQueue* outQueue; 00082 00083 protected: 00084 00085 00086 }; 00087 00088 } // namespace cmlabs 00089 00090 #endif // !defined(AFX_OBJECTREQUESTQUEUE_H__D8862297_CBBA_405D_8011_F7F570CC14F4__INCLUDED_)