00001 #ifndef __J2K__MsgContainer_HPP__
00002 #define __J2K__MsgContainer_HPP__
00003
00004 #include <stdio.h>
00005 #include <errno.h>
00006 #include <stdlib.h>
00007 #include <sys/dispatch.h>
00008
00009 #include <j2k/Fred/Standard.hpp>
00010 #include <j2k/nto/Message.hpp>
00011 #include <j2k/nto/NameSpace.hpp>
00012
00013 enum MsgContainerType_t
00014 {
00015 server = 0,
00016 client = 1
00017 };
00018
00019 class MsgContainer
00020 {
00021 protected:
00022 MsgContainerType_t user;
00023 NameSpace* n;
00024
00025 int fd;
00026 int connected;
00027
00028 Message* message;
00029 Message* replyMsg;
00030
00031 public:
00032 MsgContainer( NameSpace* n0, MsgContainerType_t user0 = client );
00033 virtual ~MsgContainer();
00034
00035 void connect( const char* name = NULL );
00036
00037 void disconnect();
00038
00039 int handleReceive( int rcvid, int replyData = 0 );
00040 int receive();
00041 void send( int data );
00042 void reply( int rcvid, int data );
00043 virtual void run() = 0;
00044
00045 inline void copy( const Message* src );
00046
00047
00048 inline BOOL isStatus();
00049 inline BOOL isGet();
00050 inline BOOL isPut();
00051 inline BOOL isClear();
00052 inline BOOL isQuit();
00053 inline BOOL isAddConsumer();
00054 inline BOOL isAddProducer();
00055 inline BOOL isExpired();
00056 inline BOOL isEmpty();
00057 inline BOOL isFull();
00058 inline BOOL isExist();
00059 inline BOOL isSuicide();
00060 inline BOOL isTimeout();
00061 inline BOOL isConsumer();
00062 inline BOOL isProducer();
00063 };
00064
00065 inline void MsgContainer::copy( const Message* src )
00066 {
00067 message->copy( src );
00068 }
00069
00070
00071 inline BOOL MsgContainer::isStatus() { return message->isStatus(); }
00072 inline BOOL MsgContainer::isGet() { return message->isGet(); }
00073 inline BOOL MsgContainer::isPut() { return message->isPut(); }
00074 inline BOOL MsgContainer::isClear() { return message->isClear(); }
00075 inline BOOL MsgContainer::isQuit() { return message->isQuit(); }
00076 inline BOOL MsgContainer::isAddConsumer() { return message->isAddConsumer(); }
00077 inline BOOL MsgContainer::isAddProducer() { return message->isAddProducer(); }
00078 inline BOOL MsgContainer::isExpired() { return message->isExpired(); }
00079 inline BOOL MsgContainer::isEmpty() { return message->isEmpty(); }
00080 inline BOOL MsgContainer::isFull() { return message->isFull(); }
00081 inline BOOL MsgContainer::isExist() { return message->isExist(); }
00082 inline BOOL MsgContainer::isSuicide() { return message->isSuicide(); }
00083 inline BOOL MsgContainer::isTimeout() { return message->isTimeout(); }
00084 inline BOOL MsgContainer::isConsumer() { return message->isConsumer(); }
00085 inline BOOL MsgContainer::isProducer() { return message->isProducer(); }
00086
00087 #endif // MsgContainer.hpp