#ifndef __ASSISTANTCHANNEL_CLIENT_G_H #define __ASSISTANTCHANNEL_CLIENT_G_H #pragma once // This code is generated by spgen tool! #include "AssistantChannel_def_g.h" namespace AssistantChannel { class ChannelService_ClientBase : public CClientSessionBase, public ICallbackListener { public: explicit ChannelService_ClientBase(CEntityBase *pEntity) : m_pEntityBase(pEntity), m_bSysManaged(false) {} ChannelService_ClientBase* operator () (const linkContext &curLink) { m_context = curLink; return this; } protected: virtual ~ChannelService_ClientBase() { /// override by user } public: void OnConnectSucceed() { bSessionClosed = false; } void OnClose(ErrorCodeEnum) { bSessionClosed = true; } bool QuerySessionClosed() { return bSessionClosed; } ErrorCodeEnum Connect(CSmartPointer &spAsyncWait) { CSmartPointer pFunc = m_pEntityBase->GetFunction(); ErrorCodeEnum Error = pFunc->ConnectRemoteEntity(this, "AssistantChannel", "ChannelService", spAsyncWait); if (Error == Error_Succeed) { m_bSysManaged = true; bSessionClosed = false; } return Error; } ErrorCodeEnum Connect() { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Connect(spAsyncWait); if (Error == Error_Succeed) { Error = spAsyncWait->WaitAnswer(); } return Error; } ErrorCodeEnum Connect(ChannelService_Connect_Req &Req, CSmartPointer &spAsyncWait, DWORD dwTimeout) { CSmartPointer pFunc = GetFunction(); CAutoBuffer Buf = SpObject2Buffer(Req); if (m_context.checkEmpty()) { m_context.AutoGenerate(); DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")(); m_context = m_context.upgradeLink(); } auto ret = pFunc->AsyncRequest(ChannelService_Method_Connect, ChannelService_MethodSignature_Connect, Buf, spAsyncWait, m_context, dwTimeout); m_context.clear(); return ret; } ErrorCodeEnum Connect(ChannelService_Connect_Req &Req, ChannelService_Connect_Ans &Ans, DWORD dwTimeout) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Connect(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum Connect(ChannelService_Connect_Req &Req, ChannelService_Connect_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Connect(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum Connect(ChannelService_Connect_Req &Req, ChannelService_Connect_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Connect(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; CSimpleString str; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum Close(ChannelService_Close_Req &Req, CSmartPointer &spAsyncWait, DWORD dwTimeout) { CSmartPointer pFunc = GetFunction(); CAutoBuffer Buf = SpObject2Buffer(Req); if (m_context.checkEmpty()) { m_context.AutoGenerate(); DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")(); m_context = m_context.upgradeLink(); } auto ret = pFunc->AsyncRequest(ChannelService_Method_Close, ChannelService_MethodSignature_Close, Buf, spAsyncWait, m_context, dwTimeout); m_context.clear(); return ret; } ErrorCodeEnum Close(ChannelService_Close_Req &Req, ChannelService_Close_Ans &Ans, DWORD dwTimeout) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Close(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum Close(ChannelService_Close_Req &Req, ChannelService_Close_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Close(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum Close(ChannelService_Close_Req &Req, ChannelService_Close_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = Close(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; CSimpleString str; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum GetState(ChannelService_GetState_Req &Req, CSmartPointer &spAsyncWait, DWORD dwTimeout) { CSmartPointer pFunc = GetFunction(); CAutoBuffer Buf = SpObject2Buffer(Req); if (m_context.checkEmpty()) { m_context.AutoGenerate(); DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")(); m_context = m_context.upgradeLink(); } auto ret = pFunc->AsyncRequest(ChannelService_Method_GetState, ChannelService_MethodSignature_GetState, Buf, spAsyncWait, m_context, dwTimeout); m_context.clear(); return ret; } ErrorCodeEnum GetState(ChannelService_GetState_Req &Req, ChannelService_GetState_Ans &Ans, DWORD dwTimeout) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = GetState(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum GetState(ChannelService_GetState_Req &Req, ChannelService_GetState_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = GetState(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum GetState(ChannelService_GetState_Req &Req, ChannelService_GetState_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = GetState(Req, spAsyncWait, dwTimeout); if (Error == Error_Succeed) { bool bEnd = false; CSimpleString str; Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout); LOG_ASSERT(Error || bEnd); } return Error; } ErrorCodeEnum BeginState(ChannelService_BeginState_Sub &Req, CSmartPointer &spAsyncWait) { CSmartPointer pFunc = GetFunction(); CAutoBuffer Buf = SpObject2Buffer(Req); ErrorCodeEnum Error = pFunc->AsyncRequest(ChannelService_Method_BeginState, ChannelService_MethodSignature_BeginState, Buf, spAsyncWait, -1); return Error; } ErrorCodeEnum BeginState(ChannelService_BeginState_Sub &Req, ICallbackListener *pCallback,IReleasable *pData = NULL) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = BeginState(Req, spAsyncWait); if (Error == Error_Succeed) { spAsyncWait->SetCallback(pCallback, pData); } return Error; } ErrorCodeEnum BeginState(ChannelService_BeginState_Sub &Req, IReleasable *pData = NULL) { return BeginState(Req, this, pData); } ErrorCodeEnum EndState(ChannelService_EndState_Info &CancelInfo) { CSmartPointer pFunc = GetFunction(); return pFunc->OnewayCall(ChannelService_Method_EndState, ChannelService_MethodSignature_EndState); } virtual void OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer pData) { /// implement by user } ErrorCodeEnum Send(ChannelService_Send_Info &Info) { CSmartPointer pFunc = GetFunction(); if (m_context.checkEmpty()) { m_context.AutoGenerate(); DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")(); m_context = m_context.upgradeLink(); } CAutoBuffer Buf = SpObject2Buffer(Info); auto ret = pFunc->OnewayCall(ChannelService_Method_Send, ChannelService_MethodSignature_Send, Buf, m_context); m_context.clear(); return ret; } ErrorCodeEnum BeginRecv(ChannelService_BeginRecv_Sub &Req, CSmartPointer &spAsyncWait) { CSmartPointer pFunc = GetFunction(); CAutoBuffer Buf = SpObject2Buffer(Req); ErrorCodeEnum Error = pFunc->AsyncRequest(ChannelService_Method_BeginRecv, ChannelService_MethodSignature_BeginRecv, Buf, spAsyncWait, -1); return Error; } ErrorCodeEnum BeginRecv(ChannelService_BeginRecv_Sub &Req, ICallbackListener *pCallback,IReleasable *pData = NULL) { CSmartPointer spAsyncWait; ErrorCodeEnum Error = BeginRecv(Req, spAsyncWait); if (Error == Error_Succeed) { spAsyncWait->SetCallback(pCallback, pData); } return Error; } ErrorCodeEnum BeginRecv(ChannelService_BeginRecv_Sub &Req, IReleasable *pData = NULL) { return BeginRecv(Req, this, pData); } ErrorCodeEnum EndRecv(ChannelService_EndRecv_Info &CancelInfo) { CSmartPointer pFunc = GetFunction(); return pFunc->OnewayCall(ChannelService_Method_EndRecv, ChannelService_MethodSignature_EndRecv); } virtual void OnMessage(ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer pData) { /// implement by user } bool SafeDelete() { if (!m_bSysManaged) { delete this; } return m_bSysManaged; } private: virtual void OnAnswer(CSmartPointer pAsynWaitSp) { CAutoBuffer Buf; bool bEnd; CSmartPointer pData; ErrorCodeEnum Error = pAsynWaitSp->AsyncGetAnswer(Buf, bEnd); DWORD dwMessageId = pAsynWaitSp->GetMessageID(); CSmartPointer pCallbackListener; pAsynWaitSp->GetCallback(pCallbackListener, pData); switch (dwMessageId) { case ChannelService_Method_BeginState: if (Error) { ChannelService_State_Info Msg; OnMessage(Error, Msg, pData); } else { ChannelService_State_Info Msg; SpBuffer2Object(Buf, Msg); OnMessage(Error, Msg, pData); } break; case ChannelService_Method_BeginRecv: if (Error) { ChannelService_Packet_Info Msg; OnMessage(Error, Msg, pData); } else { ChannelService_Packet_Info Msg; SpBuffer2Object(Buf, Msg); OnMessage(Error, Msg, pData); } break; default: assert(0); break; } } protected: bool m_bSysManaged; CEntityBase *m_pEntityBase; linkContext m_context; bool bSessionClosed; }; /////////////////////////// } // namespace AssistantChannel #endif // __ASSISTANTCHANNEL_CLIENT_G_H