YPC  0.2.0
package.h
1 #pragma once
2 #include <ff/net/common/archive.h>
3 #include <ff/net/middleware/ntpackage.h>
4 
5 namespace ypc {
6 
7 template <typename BytesType> struct make_bytes {
8 
9  template <typename PackageType, typename... ARGS, typename... PARGS>
10  static BytesType for_package(PARGS... params) {
11  PackageType p;
12  p.template set<ARGS...>(params...);
13  ff::net::marshaler lm(ff::net::marshaler::length_retriver);
14  p.arch(lm);
15 
16  BytesType ret(lm.get_length());
17  ff::net::marshaler ld((char *)ret.data(), ret.size(),
18  ff::net::marshaler::serializer);
19  p.arch(ld);
20  return ret;
21  }
22 
23  template <typename ByteType, typename PackageType>
24  static void for_package(ByteType *data, uint32_t data_size,
25  PackageType &pkg) {
26  ff::net::marshaler lm(ff::net::marshaler::length_retriver);
27  pkg.arch(lm);
28 
29  BytesType ret(lm.get_length());
30  ff::net::marshaler ld((char *)data, data_size,
31  ff::net::marshaler::serializer);
32  pkg.arch(ld);
33  }
34  template <typename PackageType>
35  static BytesType for_package(const PackageType &_pkg) {
36  auto &pkg = (PackageType &)_pkg;
37  ff::net::marshaler lm(ff::net::marshaler::length_retriver);
38  pkg.arch(lm);
39 
40  BytesType ret(lm.get_length());
41  ff::net::marshaler ld((char *)ret.data(), ret.size(),
42  ff::net::marshaler::serializer);
43  pkg.arch(ld);
44  return ret;
45  }
46 };
47 
48 template <typename PackageType> struct make_package {
49  template <typename BytesType>
50  static PackageType from_bytes(const BytesType &data) {
51  PackageType ret;
52  ::ff::net::marshaler ar((char *)data.data(), data.size(),
53  ::ff::net::marshaler::deserializer);
54  ret.arch(ar);
55  return ret;
56  }
57  template <typename ByteType>
58  static PackageType from_bytes(const ByteType *data, uint32_t data_size) {
59  PackageType ret;
60  ::ff::net::marshaler ar((char *)data, data_size,
61  ::ff::net::marshaler::deserializer);
62  ret.arch(ar);
63  return ret;
64  }
65 };
66 
67 template <typename NT, uint32_t PackageID = 0> struct cast_obj_to_package {};
68 template <uint32_t PackageID, typename... ARGS>
69 struct cast_obj_to_package<::ff::util::ntobject<ARGS...>, PackageID> {
70  using type = ::ff::net::ntpackage<PackageID, ARGS...>;
71 };
72 
73 template <uint32_t PackageID, typename... ARGS>
74 struct cast_obj_to_package<::ff::net::ntpackage<PackageID, ARGS...>,
75  PackageID> {
76  using type = ::ff::net::ntpackage<PackageID, ARGS...>;
77 };
78 
79 template <typename PT> struct cast_package_to_obj {};
80 template <uint32_t PackageID, typename... ARGS>
81 struct cast_package_to_obj<::ff::net::ntpackage<PackageID, ARGS...>> {
82  using type = ::ff::util::ntobject<ARGS...>;
83 };
84 template <typename... ARGS>
85 struct cast_package_to_obj<::ff::util::ntobject<ARGS...>> {
86  using type = ::ff::util::ntobject<ARGS...>;
87 };
88 
89 } // namespace ypc
90 
91 namespace ff {
92 namespace net {
93 template <typename... ARGS> struct archive_helper<ff::util::ntobject<ARGS...>> {
94 public:
95  using data_t = ff::util::ntobject<ARGS...>;
96  static uint32_t serialize(char *buf, const data_t &d, size_t len) {
98  marshaler m(buf, len, marshaler::serializer);
99  m.archive(ret);
100  return m.get_length();
101  }
102  static uint32_t deserialize(const char *buf, data_t &d, size_t len) {
104  marshaler m(buf, len, marshaler::deserializer);
105  m.archive(ret);
106  d = ret;
107  return m.get_length();
108  }
109  static uint32_t length(const data_t &d) {
111  marshaler m(marshaler::length_retriver);
112  m.archive(ret);
113  return m.get_length();
114  }
115 };
116 } // namespace net
117 } // namespace ff
ypc::cast_package_to_obj
Definition: package.h:79
ypc::cast_obj_to_package
Definition: package.h:67
ypc::make_package
Definition: package.h:48
ypc::make_bytes
Definition: package.h:7