00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #if !defined(_HANDLERCHAIN_H____OF_AXIS_INCLUDED_)
00019 #define _HANDLERCHAIN_H____OF_AXIS_INCLUDED_
00020
00021 #include "BasicHandler.h"
00022 #include "Handler.h"
00023 #include <list>
00024
00025 using namespace std;
00026
00027
00028
00029
00030
00031 class HandlerChain : public HandlerBase
00032 {
00033 friend class HandlerPool;
00034 private:
00035 typedef struct ChainItem
00036 {
00037 BasicHandler* m_pHandler;
00038 int m_nScope;
00039 int m_nLibId;
00040 } ChainItem;
00041 public:
00042 int addHandler(BasicHandler* pHandler, int nScope, int nLibId);
00043 HandlerChain();
00044 virtual ~HandlerChain();
00045 int AXISCALL invoke(void* pMsg);
00046 void AXISCALL onFault(void* pMsg);
00047 int AXISCALL getType(){return CHAIN_HANDLER;};
00048 int AXISCALL init();
00049 int AXISCALL fini();
00050 AXIS_BINDING_STYLE AXISCALL getBindingStyle(){ return RPC_ENCODED;};
00051
00052
00053 private:
00054 list<ChainItem> m_HandlerList;
00055 list<ChainItem>::iterator m_itCurrHandler;
00056 };
00057
00058 #endif
00059