#ifndef __CARDISSUER_COMMON_H #define __CARDISSUER_COMMON_H #pragma once #include "SpHelper.h" namespace CardIssuer { // // const goes here // #define CardIssuerService_Method_Insert 0 #define CardIssuerService_Method_CancelInsert 1 #define CardIssuerService_Method_Read 2 #define CardIssuerService_Method_Issue 3 #define CardIssuerService_Method_Capture 4 #define CardIssuerService_Method_Eject 5 #define CardIssuerService_Method_PreOnline 6 #define CardIssuerService_Method_PostOnline 7 #define CardIssuerService_Method_GetDevInfo 65535 #define CardIssuerService_MethodSignature_Insert 1091033773 #define CardIssuerService_MethodSignature_CancelInsert -1202478828 #define CardIssuerService_MethodSignature_Read -1456939493 #define CardIssuerService_MethodSignature_Issue 438783077 #define CardIssuerService_MethodSignature_Capture -1807054569 #define CardIssuerService_MethodSignature_Eject -377455114 #define CardIssuerService_MethodSignature_PreOnline 2089532238 #define CardIssuerService_MethodSignature_PostOnline 1466953860 #define CardIssuerService_MethodSignature_GetDevInfo 296205965 struct CardIssuerService_Insert_Req { CSimpleStringA aid; void Serialize(SpBuffer &Buf) { Buf & aid; } }; struct CardIssuerService_Insert_Ans { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_CancelInsert_Info { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Read_Req { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Read_Ans { CSimpleStringA data1; CSimpleStringA data2; CSimpleStringA data3; void Serialize(SpBuffer &Buf) { Buf & data1 & data2 & data3; } }; struct CardIssuerService_Issue_Req { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Issue_Ans { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Capture_Req { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Capture_Ans { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Eject_Req { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_Eject_Ans { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_PreOnline_Req { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_PreOnline_Ans { CSimpleStringA result; void Serialize(SpBuffer &Buf) { Buf & result; } }; struct CardIssuerService_PostOnline_Req { CBlob data; void Serialize(SpBuffer &Buf) { Buf & data; } }; struct CardIssuerService_PostOnline_Ans { CSimpleStringA result; void Serialize(SpBuffer &Buf) { Buf & result; } }; struct CardIssuerService_GetDevInfo_Req { void Serialize(SpBuffer &Buf) { } }; struct CardIssuerService_GetDevInfo_Ans { CSimpleStringA type; CSimpleStringA model; CSimpleStringA version; int state; void Serialize(SpBuffer &Buf) { Buf & type & model & version & state; } }; #define eMsg_FetchCard 0 #define eMsgSig_FetchCard 1110804794 struct FetchCard { int status; void Serialize(SpBuffer &Buf) { Buf & status; } }; class CardIssuerService_ServerSessionBase : public CServerSessionBase { public: CardIssuerService_ServerSessionBase() { } virtual ~CardIssuerService_ServerSessionBase() { } 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 CardIssuerService_Method_Insert: if (dwSignature == CardIssuerService_MethodSignature_Insert) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_CancelInsert: if (dwSignature == CardIssuerService_MethodSignature_CancelInsert) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Read: if (dwSignature == CardIssuerService_MethodSignature_Read) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Issue: if (dwSignature == CardIssuerService_MethodSignature_Issue) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Capture: if (dwSignature == CardIssuerService_MethodSignature_Capture) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Eject: if (dwSignature == CardIssuerService_MethodSignature_Eject) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_PreOnline: if (dwSignature == CardIssuerService_MethodSignature_PreOnline) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_PostOnline: if (dwSignature == CardIssuerService_MethodSignature_PostOnline) { bOverlap = true; } else { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_GetDevInfo: if (dwSignature == CardIssuerService_MethodSignature_GetDevInfo) { 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 CardIssuerService_Method_Insert: if (dwSignature != CardIssuerService_MethodSignature_Insert) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_CancelInsert: if (dwSignature != CardIssuerService_MethodSignature_CancelInsert) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Read: if (dwSignature != CardIssuerService_MethodSignature_Read) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Issue: if (dwSignature != CardIssuerService_MethodSignature_Issue) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Capture: if (dwSignature != CardIssuerService_MethodSignature_Capture) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_Eject: if (dwSignature != CardIssuerService_MethodSignature_Eject) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_PreOnline: if (dwSignature != CardIssuerService_MethodSignature_PreOnline) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_PostOnline: if (dwSignature != CardIssuerService_MethodSignature_PostOnline) { Error = Error_MethodSignatureFailed; } break; case CardIssuerService_Method_GetDevInfo: if (dwSignature != CardIssuerService_MethodSignature_GetDevInfo) { Error = Error_MethodSignatureFailed; } break; default: Error = Error_MethodNotFound; break; } return Error; } virtual void Handle_Insert(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_CancelInsert(SpOnewayCallContext::Pointer ctx) { /// override by user } virtual void Handle_Read(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_Issue(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_Capture(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_Eject(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_PreOnline(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_PostOnline(SpReqAnsContext::Pointer ctx) { /// override by user } virtual void Handle_GetDevInfo(SpReqAnsContext::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 CardIssuerService_Method_Insert: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_Insert(ctx); } break; case CardIssuerService_Method_CancelInsert: { SpOnewayCallContext::Pointer ctx; ctx.Attach(new SpOnewayCallContext()); SpBuffer2Object(Buf, ctx->Info); Handle_CancelInsert(ctx); } break; case CardIssuerService_Method_Read: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_Read(ctx); } break; case CardIssuerService_Method_Issue: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_Issue(ctx); } break; case CardIssuerService_Method_Capture: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_Capture(ctx); } break; case CardIssuerService_Method_Eject: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_Eject(ctx); } break; case CardIssuerService_Method_PreOnline: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_PreOnline(ctx); } break; case CardIssuerService_Method_PostOnline: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_PostOnline(ctx); } break; case CardIssuerService_Method_GetDevInfo: { SpReqAnsContext::Pointer ctx; ctx.Attach(new SpReqAnsContext(pTransactionContext)); SpBuffer2Object(Buf, ctx->Req); Handle_GetDevInfo(ctx); } break; default: assert(0); break; } } else { pTransactionContext->SendAnswer(Error); } } }; /////////////////////////// } // namespace CardIssuer #endif //__CARDISSUER_COMMON_H