diff --git a/cpp/protoutils.cc b/cpp/protoutils.cc index 3d10333..76991fa 100644 --- a/cpp/protoutils.cc +++ b/cpp/protoutils.cc @@ -342,11 +342,31 @@ namespace f8 return sizeof(WSProxyPackHead_S) + packlen; } - int Net_SendProxyMsg(a8::TcpListener* tcp_tlistener, int socket_handle, + int Net_SendProxyMsg(a8::TcpListener* tcp_listener, int socket_handle, unsigned int seqid, unsigned short error_code, unsigned short msgid, const std::string& data) { - - } -} + unsigned short parent_socket_handle = (socket_handle >> 16) & 0xFFFF; + unsigned short child_socket_handle = socket_handle & 0xFFFF; + int packlen = data.size(); + + char* buff = (char*)malloc(sizeof(WSProxyPackHead_S) + packlen); + WSProxyPackHead_S* head = (WSProxyPackHead_S*)buff; + head->packlen = packlen; + head->msgid = msgid; + head->seqid = seqid; + head->magic_code = MAGIC_CODE; + head->rpc_error_code = error_code; + head->socket_handle = child_socket_handle; + head->ext_len = packlen >> 16; + + if (data.size() > 0) { + memcpy(buff + sizeof(WSProxyPackHead_S), data.data(), data.size()); + } + tcp_listener->SendClientMsg(parent_socket_handle, buff, sizeof(WSProxyPackHead_S) + packlen); + free(buff); + return sizeof(WSProxyPackHead_S) + packlen; + } + +}