diff --git a/cpp/protoutils.cc b/cpp/protoutils.cc index e3b50e6..aae2087 100644 --- a/cpp/protoutils.cc +++ b/cpp/protoutils.cc @@ -65,7 +65,8 @@ namespace f8 msg.SerializeToArray(buff + sizeof(PackHead), packlen); } - int Net_SendMsg(a8::TcpClient* tcp_client, unsigned seqid, unsigned short msgid, ::google::protobuf::Message& msg) + int Net_SendMsg(a8::TcpClient* tcp_client, unsigned seqid, unsigned short msgid, + ::google::protobuf::Message& msg) { int packlen = msg.ByteSize(); assert(packlen < 1024 * 60); @@ -83,6 +84,25 @@ namespace f8 return sizeof(PackHead) + packlen; } + int Net_SendBigMsg(a8::TcpClient* tcp_client, unsigned seqid, unsigned short msgid, + ::google::protobuf::Message& msg) + { + int packlen = msg.ByteSize(); + assert(packlen < 1024 * 60); + + char* buff = (char*)malloc(sizeof(f8::BigPackHead) + packlen); + f8::BigPackHead* head = (f8::BigPackHead*)buff; + head->packlen = packlen; + head->msgid = msgid; + head->seqid = seqid; + head->magic_code = MAGIC_CODE; + head->rpc_error_code = 0; + msg.SerializeToArray(buff + sizeof(f8::BigPackHead), packlen); + tcp_client->SendBuff(buff, sizeof(f8::BigPackHead) + packlen); + free(buff); + return sizeof(f8::BigPackHead) + packlen; + } + int Net_SendMsg(a8::TcpListener* tcp_listener, unsigned short socket_handle, unsigned int seqid, unsigned short msgid, ::google::protobuf::Message& msg) { @@ -102,6 +122,25 @@ namespace f8 return sizeof(PackHead) + packlen; } + int Net_SendBigMsg(a8::TcpListener* tcp_listener, unsigned short socket_handle, unsigned int seqid, + unsigned short msgid, ::google::protobuf::Message& msg) + { + int packlen = msg.ByteSize(); + assert(packlen < 1024 * 60); + + char* buff = (char*)malloc(sizeof(f8::BigPackHead) + packlen); + f8::BigPackHead* head = (f8::BigPackHead*)buff; + head->packlen = packlen; + head->msgid = msgid; + head->seqid = seqid; + head->magic_code = MAGIC_CODE; + head->rpc_error_code = 0; + msg.SerializeToArray(buff + sizeof(f8::BigPackHead), packlen); + tcp_listener->SendClientMsg(socket_handle, buff, sizeof(f8::BigPackHead) + packlen); + free(buff); + return sizeof(f8::BigPackHead) + packlen; + } + int Net_BroadcastMsg(a8::TcpListener* tcp_listener, unsigned int seqid, unsigned short msgid, ::google::protobuf::Message& msg) { @@ -121,6 +160,25 @@ namespace f8 return sizeof(PackHead) + packlen; } + int Net_BroadcastBigMsg(a8::TcpListener* tcp_listener, unsigned int seqid, + unsigned short msgid, ::google::protobuf::Message& msg) + { + int packlen = msg.ByteSize(); + assert(packlen < 1024 * 60); + + char* buff = (char*)malloc(sizeof(f8::BigPackHead) + packlen); + f8::BigPackHead* head = (f8::BigPackHead*)buff; + head->packlen = packlen; + head->msgid = msgid; + head->seqid = seqid; + head->magic_code = MAGIC_CODE; + head->rpc_error_code = 0; + msg.SerializeToArray(buff + sizeof(f8::BigPackHead), packlen); + tcp_listener->BroadcastMsg(buff, sizeof(f8::BigPackHead) + packlen); + free(buff); + return sizeof(f8::BigPackHead) + packlen; + } + int Net_SendProxyCMsg(a8::TcpClient* tcp_client, unsigned short msgid, ::google::protobuf::Message& msg) { int packlen = msg.ByteSize(); diff --git a/cpp/protoutils.h b/cpp/protoutils.h index 3781bdc..191a6d3 100644 --- a/cpp/protoutils.h +++ b/cpp/protoutils.h @@ -27,6 +27,16 @@ namespace f8 unsigned short rpc_error_code; }; + //大包消息头部 + struct BigPackHead + { + int packlen; + unsigned short msgid; + unsigned int seqid; + unsigned short magic_code; + unsigned short rpc_error_code; + }; + //转发类消息头部 struct ForwardPackHead { @@ -82,12 +92,18 @@ namespace f8 void Net_PackMsg(unsigned short msgid, ::google::protobuf::Message& msg, std::string& out); int Net_SendMsg(a8::TcpClient* tcp_client, unsigned int seqid, unsigned short msgid, ::google::protobuf::Message& msg); + int Net_SendBigMsg(a8::TcpClient* tcp_client, unsigned int seqid, + unsigned short msgid, ::google::protobuf::Message& msg); int Net_SendMsg(a8::TcpClient* tcp_client, unsigned int seqid, unsigned short msgid, const char* msgbody, int msgbody_len); int Net_SendMsg(a8::TcpListener* tcp_tlistener, unsigned short socket_handle, unsigned int seqid, unsigned short msgid, ::google::protobuf::Message& msg); + int Net_SendBigMsg(a8::TcpListener* tcp_tlistener, unsigned short socket_handle, unsigned int seqid, + unsigned short msgid, ::google::protobuf::Message& msg); int Net_BroadcastMsg(a8::TcpListener* tcp_tlistener, unsigned int seqid, unsigned short msgid, ::google::protobuf::Message& msg); + int Net_BroadcastBigMsg(a8::TcpListener* tcp_tlistener, unsigned int seqid, + unsigned short msgid, ::google::protobuf::Message& msg); int Net_SendProxyCMsg(a8::TcpClient* tcp_client, unsigned short msgid, ::google::protobuf::Message& msg);