| 96 | } |
| 97 | |
| 98 | void Base :: PackBaseMsg(const std::string & sBodyBuffer, const int iCmd, std::string & sBuffer) |
| 99 | { |
| 100 | char sGroupIdx[GROUPIDXLEN] = {0}; |
| 101 | int iGroupIdx = m_poConfig->GetMyGroupIdx(); |
| 102 | memcpy(sGroupIdx, &iGroupIdx, sizeof(sGroupIdx)); |
| 103 | |
| 104 | Header oHeader; |
| 105 | oHeader.set_gid(m_poConfig->GetGid()); |
| 106 | oHeader.set_rid(0); |
| 107 | oHeader.set_cmdid(iCmd); |
| 108 | oHeader.set_version(1); |
| 109 | |
| 110 | std::string sHeaderBuffer; |
| 111 | bool bSucc = oHeader.SerializeToString(&sHeaderBuffer); |
| 112 | if (!bSucc) |
| 113 | { |
| 114 | PLGErr("Header.SerializeToString fail, skip this msg"); |
| 115 | assert(bSucc == true); |
| 116 | } |
| 117 | |
| 118 | char sHeaderLen[HEADLEN_LEN] = {0}; |
| 119 | uint16_t iHeaderLen = (uint16_t)sHeaderBuffer.size(); |
| 120 | memcpy(sHeaderLen, &iHeaderLen, sizeof(sHeaderLen)); |
| 121 | |
| 122 | sBuffer = string(sGroupIdx, sizeof(sGroupIdx)) + string(sHeaderLen, sizeof(sHeaderLen)) + sHeaderBuffer + sBodyBuffer; |
| 123 | |
| 124 | //check sum |
| 125 | uint32_t iBufferChecksum = crc32(0, (const uint8_t *)sBuffer.data(), sBuffer.size(), NET_CRC32SKIP); |
| 126 | char sBufferChecksum[CHECKSUM_LEN] = {0}; |
| 127 | memcpy(sBufferChecksum, &iBufferChecksum, sizeof(sBufferChecksum)); |
| 128 | |
| 129 | sBuffer += string(sBufferChecksum, sizeof(sBufferChecksum)); |
| 130 | } |
| 131 | |
| 132 | int Base :: UnPackBaseMsg(const std::string & sBuffer, Header & oHeader, size_t & iBodyStartPos, size_t & iBodyLen) |
| 133 | { |