| 32 | } |
| 33 | |
| 34 | void CRPCClient::_DoRead(const cppnet::Handle& handle, base::CBuffer* data, |
| 35 | uint32_t len, uint32_t err) { |
| 36 | if (err != cppnet::CEC_SUCCESS) { |
| 37 | base::LOG_ERROR("read data failed! err : %d", err); |
| 38 | return; |
| 39 | } |
| 40 | char recv_buf[8192] = { 0 }; |
| 41 | int get_len = 8192; |
| 42 | int need_len = 0; |
| 43 | int recv_len = 0; |
| 44 | for (;;) { |
| 45 | get_len = data->ReadUntil(recv_buf, 8192, "\r\n\r\n", strlen("\r\n\r\n"), need_len); |
| 46 | if (get_len == 0) { |
| 47 | break; |
| 48 | } |
| 49 | std::vector<base::CAny> vec; |
| 50 | int type = 0; |
| 51 | std::string name; |
| 52 | int code = NO_ERROR; |
| 53 | if (!_parse_package->ParseType(recv_buf, get_len, type)) { |
| 54 | if (_func_call_map.count(name)) { |
| 55 | _func_call_map[name](PARAM_TYPE_ERROR, vec); |
| 56 | } |
| 57 | break; |
| 58 | } |
| 59 | if (type & FUNCTION_RET) { |
| 60 | if (!_parse_package->ParseFuncRet(recv_buf + 2, get_len - 2, code, name, _func_map, vec)) { |
| 61 | if (_func_call_map.count(name)) { |
| 62 | _func_call_map[name](PARSE_FUNC_ERROR, vec); |
| 63 | } |
| 64 | break; |
| 65 | } |
| 66 | if (_func_call_map.count(name)) { |
| 67 | _func_call_map[name](code, vec); |
| 68 | } |
| 69 | |
| 70 | } else if (type & FUNCTION_INFO) { |
| 71 | if (!_parse_package->ParseFuncList(recv_buf + 2, get_len - 2, _func_map)) { |
| 72 | if (_func_call_map.count(name)) { |
| 73 | _func_call_map[name](PARSE_FUNC_ERROR, vec); |
| 74 | } |
| 75 | break; |
| 76 | |
| 77 | } else { |
| 78 | if (_func_call_map.count(name)) { |
| 79 | _func_call_map[name](PARAM_TYPE_ERROR, vec); |
| 80 | } |
| 81 | break; |
| 82 | } |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | void CRPCClient::_DoWrite(const cppnet::Handle& handle, uint32_t len, uint32_t err) { |
| 88 | if (err != cppnet::CEC_SUCCESS) { |
nothing calls this directly
no test coverage detected