#ifndef __ASSISTANTCHANNEL_SERVER_G_H #define __ASSISTANTCHANNEL_SERVER_G_H #pragma once // This code is generated by spgen tool! #include "AssistantChannel_def_g.h" namespace AssistantChannel { class ChannelService_ServerSessionBase : public CServerSessionBase { public: ChannelService_ServerSessionBase() { /// override by user } virtual ~ChannelService_ServerSessionBase() { /// override by user } virtual bool IsExclusive() { return false; } virtual bool IsSessionOverlap() { return true; } virtual ErrorCodeEnum GetMessageAttr(DWORD dwMessageID, DWORD dwSignature, bool &bOverlap) { ErrorCodeEnum Error = Error_Succeed; switch (dwMessageID) { case ChannelService_Method_Connect: if (dwSignature == ChannelService_MethodSignature_Connect) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_Close: if (dwSignature == ChannelService_MethodSignature_Close) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_GetState: if (dwSignature == ChannelService_MethodSignature_GetState) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_BeginState: if (dwSignature == ChannelService_MethodSignature_BeginState) { bOverlap = false; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_EndState: if (dwSignature == ChannelService_MethodSignature_EndState) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_Send: if (dwSignature == ChannelService_MethodSignature_Send) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_BeginRecv: if (dwSignature == ChannelService_MethodSignature_BeginRecv) { bOverlap = false; } else { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_EndRecv: if (dwSignature == ChannelService_MethodSignature_EndRecv) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; default: Error = Error_MethodNotFound; break; } return Error; } int CheckMessageSignature(DWORD dwMessageID, DWORD dwSignature) { ErrorCodeEnum Error = Error_Succeed; switch (dwMessageID) { case ChannelService_Method_Connect: if (dwSignature != ChannelService_MethodSignature_Connect) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_Close: if (dwSignature != ChannelService_MethodSignature_Close) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_GetState: if (dwSignature != ChannelService_MethodSignature_GetState) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_BeginState: if (dwSignature != ChannelService_MethodSignature_BeginState) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_EndState: if (dwSignature != ChannelService_MethodSignature_EndState) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_Send: if (dwSignature != ChannelService_MethodSignature_Send) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_BeginRecv: if (dwSignature != ChannelService_MethodSignature_BeginRecv) { Error = Error_MethodSignatureFailed; } break; case ChannelService_Method_EndRecv: if (dwSignature != ChannelService_MethodSignature_EndRecv) { Error = Error_MethodSignatureFailed; } break; default: Error = Error_MethodNotFound; break; } return Error; } virtual void Handle_Connect(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_Close(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_GetState(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_BeginState(SpSubscribeContext::Pointer ctx) { /// override by user } virtual void Handle_EndState(SpOnewayCallContext::Pointer ctx) { /// override by user } virtual void Handle_Send(SpOnewayCallContext::Pointer ctx) { /// override by user } virtual void Handle_BeginRecv(SpSubscribeContext::Pointer ctx) { /// override by user } virtual void Handle_EndRecv(SpOnewayCallContext::Pointer ctx) { /// override by user } virtual void OnRequest(CSmartPointer pTransactionContext) { CAutoBuffer Buf; DWORD dwMessageID; DWORD dwMessageSignature; ErrorCodeEnum Error = pTransactionContext->GetReceiveBuffer(dwMessageID, dwMessageSignature, Buf); if (Error == Error_Succeed) { #ifdef DEBUG assert(CheckMessageSignature(dwMessageID, dwMessageSignature) == Error_Succeed); #else if (CheckMessageSignature(dwMessageID, dwMessageSignature) != Error_Succeed) { pTransactionContext->SendAnswer(Error_MethodSignatureFailed); return; } #endif switch (dwMessageID) { case ChannelService_Method_Connect: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); pTransactionContext->GetLinkContext(ctx->link); EntityResource::setLink(ctx->link); Handle_Connect(ctx); } break; case ChannelService_Method_Close: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); pTransactionContext->GetLinkContext(ctx->link); EntityResource::setLink(ctx->link); Handle_Close(ctx); } break; case ChannelService_Method_GetState: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); pTransactionContext->GetLinkContext(ctx->link); EntityResource::setLink(ctx->link); Handle_GetState(ctx); } break; case ChannelService_Method_BeginState: { SpSubscribeContext::Pointer ctx; ctx.Attach(new SpSubscribeContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_BeginState(ctx); } break; case ChannelService_Method_EndState: { SpOnewayCallContext::Pointer ctx; ctx.Attach(new SpOnewayCallContext()); SpBuffer2Object(Buf, ctx->Info); Handle_EndState(ctx); } break; case ChannelService_Method_Send: { SpOnewayCallContext::Pointer ctx; ctx.Attach(new SpOnewayCallContext()); SpBuffer2Object(Buf, ctx->Info); pTransactionContext->GetLinkContext(ctx->link); EntityResource::setLink(ctx->link); Handle_Send(ctx); } break; case ChannelService_Method_BeginRecv: { SpSubscribeContext::Pointer ctx; ctx.Attach(new SpSubscribeContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_BeginRecv(ctx); } break; case ChannelService_Method_EndRecv: { SpOnewayCallContext::Pointer ctx; ctx.Attach(new SpOnewayCallContext()); SpBuffer2Object(Buf, ctx->Info); Handle_EndRecv(ctx); } break; default: assert(0); break; } } else { pTransactionContext->SendAnswer(Error); } } }; /////////////////////////// } // namespace AssistantChannel #endif // __ASSISTANTCHANNEL_SERVER_G_H