IDCertificate_common.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. #ifndef __IDCERTIFICATE_COMMON_H
  2. #define __IDCERTIFICATE_COMMON_H
  3. namespace IDCertificate {
  4. //
  5. // const goes here
  6. //
  7. #define IDCertService_Method_Read 0
  8. #define IDCertService_Method_CancelRead 1
  9. #define IDCertService_Method_GetDevInfo 65535
  10. #define IDCertService_MethodSignature_Read 1473284635
  11. #define IDCertService_MethodSignature_CancelRead -342104338
  12. #define IDCertService_MethodSignature_GetDevInfo 296205965
  13. struct IDCertService_Read_Req
  14. {
  15. void Serialize(SpBuffer &Buf)
  16. {
  17. }
  18. };
  19. struct IDCertService_Read_Ans
  20. {
  21. CSimpleStringA name;
  22. CSimpleStringA sex;
  23. CSimpleStringA nation;
  24. CSimpleStringA birthday;
  25. CSimpleStringA address;
  26. CSimpleStringA idcode;
  27. CSimpleStringA department;
  28. CSimpleStringA startdate;
  29. CSimpleStringA enddate;
  30. CBlob photodata;
  31. void Serialize(SpBuffer &Buf)
  32. {
  33. Buf & name & sex & nation & birthday & address & idcode & department & startdate & enddate & photodata;
  34. }
  35. };
  36. struct IDCertService_CancelRead_Info
  37. {
  38. void Serialize(SpBuffer &Buf)
  39. {
  40. }
  41. };
  42. struct IDCertService_GetDevInfo_Req
  43. {
  44. void Serialize(SpBuffer &Buf)
  45. {
  46. }
  47. };
  48. struct IDCertService_GetDevInfo_Ans
  49. {
  50. CSimpleStringA type;
  51. CSimpleStringA model;
  52. CSimpleStringA version;
  53. int state;
  54. void Serialize(SpBuffer &Buf)
  55. {
  56. Buf & type & model & version & state;
  57. }
  58. };
  59. class IDCertService_ServerSessionBase : public CServerSessionBase
  60. {
  61. public:
  62. IDCertService_ServerSessionBase() { }
  63. virtual ~IDCertService_ServerSessionBase() { }
  64. virtual bool IsExclusive() { return false; }
  65. virtual bool IsSessionOverlap() { return true; }
  66. virtual ErrorCodeEnum GetMessageAttr(DWORD dwMessageID, DWORD dwSignature, bool &bOverlap)
  67. {
  68. ErrorCodeEnum Error = Error_Succeed;
  69. switch (dwMessageID) {
  70. case IDCertService_Method_Read:
  71. if (dwSignature == IDCertService_MethodSignature_Read) {
  72. bOverlap = true;
  73. } else {
  74. Error = Error_MethodSignatureFailed;
  75. }
  76. break;
  77. case IDCertService_Method_CancelRead:
  78. if (dwSignature == IDCertService_MethodSignature_CancelRead) {
  79. bOverlap = true;
  80. } else {
  81. Error = Error_MethodSignatureFailed;
  82. }
  83. break;
  84. case IDCertService_Method_GetDevInfo:
  85. if (dwSignature == IDCertService_MethodSignature_GetDevInfo) {
  86. bOverlap = true;
  87. } else {
  88. Error = Error_MethodSignatureFailed;
  89. }
  90. break;
  91. default:
  92. Error = Error_MethodNotFound;
  93. break;
  94. }
  95. return Error;
  96. }
  97. int CheckMessageSignature(DWORD dwMessageID, DWORD dwSignature)
  98. {
  99. ErrorCodeEnum Error = Error_Succeed;
  100. switch (dwMessageID) {
  101. case IDCertService_Method_Read:
  102. if (dwSignature != IDCertService_MethodSignature_Read) {
  103. Error = Error_MethodSignatureFailed;
  104. }
  105. break;
  106. case IDCertService_Method_CancelRead:
  107. if (dwSignature != IDCertService_MethodSignature_CancelRead) {
  108. Error = Error_MethodSignatureFailed;
  109. }
  110. break;
  111. case IDCertService_Method_GetDevInfo:
  112. if (dwSignature != IDCertService_MethodSignature_GetDevInfo) {
  113. Error = Error_MethodSignatureFailed;
  114. }
  115. break;
  116. default:
  117. Error = Error_MethodNotFound;
  118. break;
  119. }
  120. return Error;
  121. }
  122. virtual void Handle_Read(SpReqAnsContext<IDCertService_Read_Req, IDCertService_Read_Ans>::Pointer ctx)
  123. {
  124. /// override by user
  125. }
  126. virtual void Handle_CancelRead(SpOnewayCallContext<IDCertService_CancelRead_Info>::Pointer ctx)
  127. {
  128. /// override by user
  129. }
  130. virtual void Handle_GetDevInfo(SpReqAnsContext<IDCertService_GetDevInfo_Req, IDCertService_GetDevInfo_Ans>::Pointer ctx)
  131. {
  132. /// override by user
  133. }
  134. virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
  135. {
  136. CAutoBuffer Buf;
  137. DWORD dwMessageID;
  138. DWORD dwMessageSignature;
  139. ErrorCodeEnum Error = pTransactionContext->GetReceiveBuffer(dwMessageID, dwMessageSignature, Buf);
  140. if (Error == Error_Succeed) {
  141. #ifdef DEBUG
  142. assert(CheckMessageSignature(dwMessageID, dwMessageSignature) == Error_Succeed);
  143. #else
  144. if (CheckMessageSignature(dwMessageID, dwMessageSignature) != Error_Succeed) {
  145. pTransactionContext->SendAnswer(Error_MethodSignatureFailed);
  146. return;
  147. }
  148. #endif
  149. switch (dwMessageID) {
  150. case IDCertService_Method_Read:
  151. {
  152. SpReqAnsContext<IDCertService_Read_Req,IDCertService_Read_Ans>::Pointer ctx;
  153. ctx.Attach(new SpReqAnsContext<IDCertService_Read_Req,IDCertService_Read_Ans>(pTransactionContext));
  154. SpBuffer2Object(Buf, ctx->Req);
  155. Handle_Read(ctx);
  156. }
  157. break;
  158. case IDCertService_Method_CancelRead:
  159. {
  160. SpOnewayCallContext<IDCertService_CancelRead_Info>::Pointer ctx;
  161. ctx.Attach(new SpOnewayCallContext<IDCertService_CancelRead_Info>());
  162. SpBuffer2Object(Buf, ctx->Info);
  163. Handle_CancelRead(ctx);
  164. }
  165. break;
  166. case IDCertService_Method_GetDevInfo:
  167. {
  168. SpReqAnsContext<IDCertService_GetDevInfo_Req,IDCertService_GetDevInfo_Ans>::Pointer ctx;
  169. ctx.Attach(new SpReqAnsContext<IDCertService_GetDevInfo_Req,IDCertService_GetDevInfo_Ans>(pTransactionContext));
  170. SpBuffer2Object(Buf, ctx->Req);
  171. Handle_GetDevInfo(ctx);
  172. }
  173. break;
  174. default:
  175. assert(0);
  176. break;
  177. }
  178. } else {
  179. pTransactionContext->SendAnswer(Error);
  180. }
  181. }
  182. };
  183. ///////////////////////////
  184. } // namespace IDCertificate
  185. #endif //__IDCERTIFICATE_COMMON_H