diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/include/utilities.h | 5 | ||||
-rw-r--r-- | server/src/utilities.cpp | 26 |
2 files changed, 31 insertions, 0 deletions
diff --git a/server/include/utilities.h b/server/include/utilities.h index de97f2f..9becc48 100644 --- a/server/include/utilities.h +++ b/server/include/utilities.h @@ -23,9 +23,14 @@ #include <string> +#include <memory> std::string replace_home_var(const std::string &path); +class server_msg; + +std::shared_ptr<char*> pack_msg(server_msg *msg, int *size); + diff --git a/server/src/utilities.cpp b/server/src/utilities.cpp index 1cebd16..5ea14c1 100644 --- a/server/src/utilities.cpp +++ b/server/src/utilities.cpp @@ -19,6 +19,7 @@ */ #include "utilities.h" +#include "../../protocol/udm.pb.h" std::string replace_home_var(const std::string &path) { @@ -28,3 +29,28 @@ std::string replace_home_var(const std::string &path) return tmp_path; } + + +std::shared_ptr<char*> pack_data(const std::string &buf, int *size_) +{ +// BOOST_LOG_TRIVIAL(debug)<<__FILE__<<":"<<__LINE__<<"\t"<<__func__; + std::shared_ptr<char*> ptr = std::make_shared<char*>(new char[buf.length() + 4]); + int32_t size = buf.length(); + *size_ = size + 4; + (*ptr)[3] = size & 0xff; + (*ptr)[2] = (size>>8) & 0xff; + (*ptr)[1] = (size>>16) & 0xff; + (*ptr)[0] = (size>>24) & 0xff; + char *fck = (*ptr)+4; + memcpy(fck, buf.data(), buf.length()); + return ptr; +} + +std::shared_ptr<char*> pack_msg(server_msg *msg, int *size_) +{ +// BOOST_LOG_TRIVIAL(debug)<<__FILE__<<":"<<__LINE__<<"\t"<<__func__; +// BOOST_LOG_TRIVIAL(trace)<<"packing message:\n"<<cmd.DebugString(); + std::string msg_buf; + msg->SerializeToString(&msg_buf); + return pack_data(msg_buf, size_); +} |