add utils.*
This commit is contained in:
parent
c4f3714a97
commit
5e6482a41c
@ -24,9 +24,9 @@ int Net_GetMessageId(::google::protobuf::Message& msg)
|
|||||||
}
|
}
|
||||||
std::string msgid_enum_name;
|
std::string msgid_enum_name;
|
||||||
if (msgname[0] == 'C' && msgname[1] == 'M') {
|
if (msgname[0] == 'C' && msgname[1] == 'M') {
|
||||||
msgid_enum_name = "kingsomevs.CMMessageId_e";
|
msgid_enum_name = "cs.CMMessageId_e";
|
||||||
} else if (msgname[0] == 'S' && msgname[1] == 'M') {
|
} else if (msgname[0] == 'S' && msgname[1] == 'M') {
|
||||||
msgid_enum_name = "kingsomevs.SMMessageId_e";
|
msgid_enum_name = "cs.SMMessageId_e";
|
||||||
} else if (msgname[0] == 'S' && msgname[1] == 'S') {
|
} else if (msgname[0] == 'S' && msgname[1] == 'S') {
|
||||||
msgid_enum_name = "ss.SSMessageId_e";
|
msgid_enum_name = "ss.SSMessageId_e";
|
||||||
} else {
|
} else {
|
||||||
@ -59,11 +59,11 @@ void Net_PackMsg(unsigned short msgid, ::google::protobuf::Message& msg, std::st
|
|||||||
PackHead* head = (PackHead*)buff;
|
PackHead* head = (PackHead*)buff;
|
||||||
head->packlen = packlen;
|
head->packlen = packlen;
|
||||||
head->msgid = msgid;
|
head->msgid = msgid;
|
||||||
head->magiccode = MAGIC_CODE;
|
head->magic_code = MAGIC_CODE;
|
||||||
msg.SerializeToArray(buff + sizeof(PackHead), packlen);
|
msg.SerializeToArray(buff + sizeof(PackHead), packlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Net_SendMsg(a8::TcpClient* tcp_client, 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();
|
int packlen = msg.ByteSize();
|
||||||
|
|
||||||
@ -71,14 +71,15 @@ int Net_SendMsg(a8::TcpClient* tcp_client, unsigned short msgid, ::google::proto
|
|||||||
PackHead* head = (PackHead*)buff;
|
PackHead* head = (PackHead*)buff;
|
||||||
head->packlen = packlen;
|
head->packlen = packlen;
|
||||||
head->msgid = msgid;
|
head->msgid = msgid;
|
||||||
head->magiccode = MAGIC_CODE;
|
head->seqid = seqid;
|
||||||
|
head->magic_code = MAGIC_CODE;
|
||||||
msg.SerializeToArray(buff + sizeof(PackHead), packlen);
|
msg.SerializeToArray(buff + sizeof(PackHead), packlen);
|
||||||
tcp_client->SendBuff(buff, sizeof(PackHead) + packlen);
|
tcp_client->SendBuff(buff, sizeof(PackHead) + packlen);
|
||||||
free(buff);
|
free(buff);
|
||||||
return sizeof(PackHead) + packlen;
|
return sizeof(PackHead) + packlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Net_SendMsg(a8::TcpListener* tcp_listener, unsigned short socket_handle,
|
int Net_SendMsg(a8::TcpListener* tcp_listener, unsigned short socket_handle, unsigned int seqid,
|
||||||
unsigned short msgid, ::google::protobuf::Message& msg)
|
unsigned short msgid, ::google::protobuf::Message& msg)
|
||||||
{
|
{
|
||||||
int packlen = msg.ByteSize();
|
int packlen = msg.ByteSize();
|
||||||
@ -87,9 +88,33 @@ int Net_SendMsg(a8::TcpListener* tcp_listener, unsigned short socket_handle,
|
|||||||
PackHead* head = (PackHead*)buff;
|
PackHead* head = (PackHead*)buff;
|
||||||
head->packlen = packlen;
|
head->packlen = packlen;
|
||||||
head->msgid = msgid;
|
head->msgid = msgid;
|
||||||
head->magiccode = MAGIC_CODE;
|
head->seqid = seqid;
|
||||||
|
head->magic_code = MAGIC_CODE;
|
||||||
msg.SerializeToArray(buff + sizeof(PackHead), packlen);
|
msg.SerializeToArray(buff + sizeof(PackHead), packlen);
|
||||||
tcp_listener->SendClientMsg(socket_handle, buff, sizeof(PackHead) + packlen);
|
tcp_listener->SendClientMsg(socket_handle, buff, sizeof(PackHead) + packlen);
|
||||||
free(buff);
|
free(buff);
|
||||||
return sizeof(PackHead) + packlen;
|
return sizeof(PackHead) + packlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Net_SendProxyMsg(a8::TcpListener* tcp_listener, int socket_handle, unsigned int seqid, unsigned short error_code,
|
||||||
|
unsigned short msgid, ::google::protobuf::Message& msg)
|
||||||
|
{
|
||||||
|
unsigned short parent_socket_handle = (socket_handle >> 16) & 0xFFFF;
|
||||||
|
unsigned short child_socket_handle = socket_handle & 0xFFFF;
|
||||||
|
|
||||||
|
int packlen = msg.ByteSize();
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
msg.SerializeToArray(buff + sizeof(WSProxyPackHead_S), packlen);
|
||||||
|
tcp_listener->SendClientMsg(parent_socket_handle, buff, sizeof(WSProxyPackHead_S) + packlen);
|
||||||
|
free(buff);
|
||||||
|
return sizeof(WSProxyPackHead_S) + packlen;
|
||||||
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
#ifndef COMMON_PROTOUTILS_H
|
#pragma once
|
||||||
#define COMMON_PROTOUTILS_H
|
|
||||||
|
|
||||||
//普通消息头部
|
//普通消息头部
|
||||||
struct PackHead
|
struct PackHead
|
||||||
{
|
{
|
||||||
unsigned short packlen;
|
unsigned short packlen;
|
||||||
unsigned short msgid;
|
unsigned short msgid;
|
||||||
unsigned int magiccode;
|
unsigned int seqid;
|
||||||
|
unsigned short magic_code;
|
||||||
|
unsigned short rpc_error_code;
|
||||||
};
|
};
|
||||||
|
|
||||||
//转发类消息头部
|
//转发类消息头部
|
||||||
@ -21,6 +22,28 @@ struct ForwardPackHead
|
|||||||
unsigned int sign;
|
unsigned int sign;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct WSProxyPackHead_C
|
||||||
|
{
|
||||||
|
unsigned short packlen;
|
||||||
|
unsigned short msgid;
|
||||||
|
unsigned int seqid;
|
||||||
|
unsigned short magic_code;
|
||||||
|
|
||||||
|
unsigned short socket_handle;
|
||||||
|
unsigned long ip_saddr;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct WSProxyPackHead_S
|
||||||
|
{
|
||||||
|
unsigned short packlen;
|
||||||
|
unsigned short msgid;
|
||||||
|
unsigned int seqid;
|
||||||
|
unsigned short magic_code;
|
||||||
|
unsigned short rpc_error_code;
|
||||||
|
|
||||||
|
unsigned short socket_handle;
|
||||||
|
};
|
||||||
|
|
||||||
class Player;
|
class Player;
|
||||||
struct MsgHdr
|
struct MsgHdr
|
||||||
{
|
{
|
||||||
@ -35,7 +58,7 @@ struct MsgHdr
|
|||||||
const void* user_data = nullptr;
|
const void* user_data = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned int MAGIC_CODE = 0xAABBCCAA;
|
const unsigned short MAGIC_CODE = (((unsigned short)'S') << 8) | ((unsigned short)'K');
|
||||||
|
|
||||||
namespace google
|
namespace google
|
||||||
{
|
{
|
||||||
@ -54,10 +77,12 @@ namespace a8
|
|||||||
int Net_GetMessageId(::google::protobuf::Message& msg);
|
int Net_GetMessageId(::google::protobuf::Message& msg);
|
||||||
|
|
||||||
void Net_PackMsg(unsigned short msgid, ::google::protobuf::Message& msg, std::string& out);
|
void Net_PackMsg(unsigned short msgid, ::google::protobuf::Message& msg, std::string& out);
|
||||||
int Net_SendMsg(a8::TcpClient* tcp_client, unsigned short msgid, ::google::protobuf::Message& msg);
|
int Net_SendMsg(a8::TcpClient* tcp_client, unsigned int seqid,
|
||||||
int Net_SendMsg(a8::TcpClient* tcp_client, unsigned short msgid,
|
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);
|
const char* msgbody, int msgbody_len);
|
||||||
int Net_SendMsg(a8::TcpListener* tcp_tlistener, unsigned short socket_handle,
|
int Net_SendMsg(a8::TcpListener* tcp_tlistener, unsigned short socket_handle, unsigned int seqid,
|
||||||
unsigned short msgid, ::google::protobuf::Message& msg);
|
unsigned short msgid, ::google::protobuf::Message& msg);
|
||||||
|
|
||||||
#endif
|
int Net_SendProxyMsg(a8::TcpListener* tcp_tlistener, int socket_handle, unsigned int seqid, unsigned short error_code,
|
||||||
|
unsigned short msgid, ::google::protobuf::Message& msg);
|
||||||
|
75
cpp/utils.cc
Normal file
75
cpp/utils.cc
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#include <a8/a8.h>
|
||||||
|
|
||||||
|
#include <a8/stringlist.h>
|
||||||
|
#include <a8/csvreader.h>
|
||||||
|
|
||||||
|
#include <google/protobuf/message.h>
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
|
||||||
|
bool ReadCsvMetaFile(const std::string& filename,
|
||||||
|
google::protobuf::Message* prototype,
|
||||||
|
std::function<void (google::protobuf::Message*)> push_back_func)
|
||||||
|
{
|
||||||
|
const google::protobuf::Descriptor* descriptor = prototype->GetDescriptor();
|
||||||
|
const google::protobuf::Reflection* reflection = prototype->GetReflection();
|
||||||
|
|
||||||
|
a8::CsvReader reader;
|
||||||
|
reader.Load(filename);
|
||||||
|
while (reader.NextLine()) {
|
||||||
|
google::protobuf::Message* msg = prototype->New();
|
||||||
|
|
||||||
|
for (int i = 0; i < descriptor->field_count(); ++i) {
|
||||||
|
const google::protobuf::FieldDescriptor* field_desc = descriptor->field(i);
|
||||||
|
const std::string& field_name = field_desc->name();
|
||||||
|
|
||||||
|
switch (field_desc->cpp_type()) {
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
|
||||||
|
{
|
||||||
|
reflection->SetString(msg, field_desc, reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
|
||||||
|
{
|
||||||
|
reflection->SetInt32(msg, field_desc, reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
|
||||||
|
{
|
||||||
|
reflection->SetUInt32(msg, field_desc, reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
|
||||||
|
{
|
||||||
|
reflection->SetInt64(msg, field_desc, reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
|
||||||
|
{
|
||||||
|
reflection->SetUInt64(msg, field_desc, reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT:
|
||||||
|
{
|
||||||
|
reflection->SetFloat(msg, field_desc, (double)reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE:
|
||||||
|
{
|
||||||
|
reflection->SetDouble(msg, field_desc, reader.GetValue(field_name));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}//end switch
|
||||||
|
push_back_func(msg);
|
||||||
|
delete msg;
|
||||||
|
}//end for
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
28
cpp/utils.h
Normal file
28
cpp/utils.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace google
|
||||||
|
{
|
||||||
|
namespace protobuf
|
||||||
|
{
|
||||||
|
class Descriptor;
|
||||||
|
class Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadCsvMetaFile(const std::string& filename,
|
||||||
|
google::protobuf::Message* prototype,
|
||||||
|
std::function<void (google::protobuf::Message*)> push_back_func);
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool ReadCsvMetaFile(const std::string& filename, std::list<T>& meta_list)
|
||||||
|
{
|
||||||
|
T dummy;
|
||||||
|
return ReadCsvMetaFile(filename,
|
||||||
|
&dummy,
|
||||||
|
[&meta_list] (google::protobuf::Message* msg)
|
||||||
|
{
|
||||||
|
T t;
|
||||||
|
t.CopyFrom(*msg);
|
||||||
|
meta_list.emplace_back(t);
|
||||||
|
});
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user