TerminalInfoQueryConn.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "TerminalInfoQueryConn.h"
  2. #include <memory>
  3. CTerminalInfoQuery::CTerminalInfoQuery(CEntityBase* pEntity)
  4. :SpSecureClient(pEntity)
  5. {
  6. }
  7. bool CTerminalInfoQuery::ConnectServer(const std::string& serverAddr, int port)
  8. {
  9. return Connect(serverAddr.c_str(), port, 3);
  10. }
  11. void CTerminalInfoQuery::OnDisconnect()
  12. {
  13. Dbg("connection disconnected");
  14. }
  15. void CTerminalInfoQuery::OnPkgAnswer(const CSmartPointer<IPackage>& pRecvPkg)
  16. {
  17. const std::string serviceCode = pRecvPkg->GetServiceCode();
  18. }
  19. ErrorCodeEnum CTerminalInfoQuery::GetTerminalInfo(const std::string& terminalNo, TerminalRegistRet* terminalInfo)
  20. {
  21. SendSayHelloReq(terminalNo);
  22. auto result = GetFunction()->ReceivePackage(5);
  23. ErrorCodeEnum err = DealSayHelloRet(result);
  24. if (Error_Succeed == err) {
  25. memcpy(terminalInfo, &terminalAns, sizeof(TerminalRegistRet));
  26. } else {
  27. Dbg("Deal with SayHello return value failed!: %s", SpStrError(err));
  28. }
  29. return err;
  30. }
  31. ErrorCodeEnum CTerminalInfoQuery::SendSayHelloReq(const std::string& terminalNo)
  32. {
  33. TerminalRegistReq req;
  34. memset(&req, 0, sizeof(TerminalRegistReq));
  35. strcpy(req.TerminalNo, terminalNo.c_str());
  36. CSmartPointer<IPackage> package = GetFunction()->CreateNewPackage("SayHello");
  37. package->AddStruct("TerminalRegistReq", false, false, (BYTE*)&req, sizeof(req));
  38. return SendPackage(package) != "" ? Error_Succeed : Error_Unexpect;
  39. }
  40. ErrorCodeEnum CTerminalInfoQuery::DealSayHelloRet(const CSmartPointer<IPackage>& pRecvPkg)
  41. {
  42. ErrorCodeEnum result(Error_Unexpect);
  43. DWORD dwSysCode, dwUserCode;
  44. std::string strErrMsg;
  45. memset(&terminalAns, 0, sizeof(terminalAns));
  46. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg)) {
  47. CSimpleStringA str = CSimpleStringA::Format("[%u] %s", dwUserCode, strErrMsg.c_str());
  48. StoreErrorMsg(str.GetData());
  49. result = static_cast<ErrorCodeEnum>(dwSysCode);
  50. } else {
  51. int nLen = pRecvPkg->GetStructLen("TerminalRegistRet");
  52. if (nLen <= 0) {
  53. StoreErrorMsg("not find struct [TerminalRegistRet] in package");
  54. } else {
  55. BYTE* pBuf = new BYTE[nLen];
  56. memset(pBuf, 0, nLen);
  57. int nArrayNum = 0;
  58. if (!pRecvPkg->GetStructData("TerminalRegistRet", (BYTE*)pBuf, &nLen, &nArrayNum)) {
  59. delete[] pBuf;
  60. StoreErrorMsg("get struct [TerminalRegistRet] data fail");
  61. } else {
  62. TerminalRegistRet* pReq = (TerminalRegistRet *)pBuf;
  63. Dbg("receive ret1: %s, %d %d", pReq->TerminalNo, nLen, nArrayNum);
  64. memcpy(&terminalAns, pReq, sizeof(TerminalRegistRet));
  65. delete[] pBuf;
  66. result = Error_Succeed;
  67. }
  68. }
  69. }
  70. return result;
  71. }