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 "Handler.h"
00022
00023
00024
00025
00026
00027
00028 class HandlerChain : public HandlerBase
00029 {
00030 friend class HandlerPool;
00031 private:
00032 typedef struct ChainItem
00033 {
00034 BasicHandler* m_pHandler;
00035 int m_nScope;
00036 int m_nLibId;
00037 } ChainItem;
00038 public:
00039 int addHandler(BasicHandler* pHandler, int nScope, int nLibId);
00040 HandlerChain();
00041 virtual ~HandlerChain();
00042 int AXISCALL invoke(void* pMsg);
00043 void AXISCALL onFault(void* pMsg);
00044 int AXISCALL getType(){return CHAIN_HANDLER;};
00045 int AXISCALL init();
00046 int AXISCALL fini();
00047 AXIS_BINDING_STYLE AXISCALL getBindingStyle(){ return RPC_ENCODED;};
00048
00049
00050 private:
00051 list<ChainItem> m_HandlerList;
00052 list<ChainItem>::iterator m_itCurrHandler;
00053 };
00054
00055 #endif
00056