117#ifndef ASYNC_MSG_INCLUDED
118#define ASYNC_MSG_INCLUDED
191#define ASYNC_MSG_DERIVED_FROM(BASE_CLASS) \
192 bool packParent(std::ostream& os) const \
194 return BASE_CLASS::pack(os); \
196 size_t packedSizeParent(void) const \
198 return BASE_CLASS::packedSize(); \
200 bool unpackParent(std::istream& is) \
202 return BASE_CLASS::unpack(is); \
212#define ASYNC_MSG_MEMBERS(...) \
213 bool pack(std::ostream& os) const \
215 return packParent(os) && Msg::pack(os, __VA_ARGS__); \
217 size_t packedSize(void) const \
219 return packedSizeParent() + Msg::packedSize(__VA_ARGS__); \
221 bool unpack(std::istream& is) \
223 return unpackParent(is) && Msg::unpack(is, __VA_ARGS__); \
231#define ASYNC_MSG_NO_MEMBERS \
232 bool pack(std::ostream& os) const \
234 return packParent(os); \
236 size_t packedSize(void) const { return packedSizeParent(); } \
237 bool unpack(std::istream& is) \
239 return unpackParent(is); \
261 static bool pack(std::ostream&
os,
const T& val) {
return val.pack(
os); }
262 static size_t packedSize(
const T& val) {
return val.packedSize(); }
263 static bool unpack(std::istream&
is,
T& val) {
return val.unpack(
is); }
270 static bool pack(std::ostream&
os,
char val)
273 return os.
write(&val, 1).good();
288 static bool pack(std::ostream&
os,
const T& val)
294 return os.
write(
o.buf,
sizeof(
T)).good();
300 is.read(
o.buf,
sizeof(
T));
322 static bool pack(std::ostream&
os,
const T& val)
328 return os.
write(
o.buf,
sizeof(
T)).good();
334 is.read(
o.buf,
sizeof(
T));
356 static bool pack(std::ostream&
os,
const T& val)
362 return os.
write(
o.buf,
sizeof(
T)).good();
368 is.read(
o.buf,
sizeof(
T));
389 static bool pack(std::ostream&
os,
const T& val)
392 return os.
write(
reinterpret_cast<const char*
>(&val),
sizeof(
T)).good();
397 is.read(
reinterpret_cast<char*
>(&val),
sizeof(
T));
409 static bool pack(std::ostream&
os,
const std::string& val)
412 if (val.size() > std::numeric_limits<uint16_t>::max())
418 os.
write(val.c_str(), val.size());
422 return sizeof(
uint16_t) + val.size();
424 static bool unpack(std::istream&
is, std::string& val)
429 if (
str_len > std::numeric_limits<uint16_t>::max())
449 static bool pack(std::ostream&
os,
const std::vector<I>&
vec)
452 if (
vec.size() > std::numeric_limits<uint16_t>::max())
457 for (
typename std::vector<I>::const_iterator
it =
vec.begin();
468 for (
typename std::vector<I>::const_iterator
it =
vec.begin();
479 if (
vec_size > std::numeric_limits<uint16_t>::max())
496template <
typename Tag,
typename Value>
500 static bool pack(std::ostream&
os,
const std::map<Tag, Value>&
m)
503 if (
m.size() > std::numeric_limits<uint16_t>::max())
508 for (
typename std::map<Tag,Value>::const_iterator
it =
m.begin();
520 for (
typename std::map<Tag, Value>::const_iterator
it =
m.begin();
528 static bool unpack(std::istream&
is, std::map<Tag,Value>&
m)
532 if (
map_size > std::numeric_limits<uint16_t>::max())
565 virtual bool pack(std::ostream&)
const {
return true; }
567 virtual bool unpack(std::istream&)
const {
return true; }
569 template <
typename T>
570 bool pack(std::ostream&
os,
const T& val)
const
574 template <
typename T>
579 template <
typename T>
585 template <
typename T1,
typename T2>
590 template <
typename T1,
typename T2>
595 template <
typename T1,
typename T2>
601 template <
typename T1,
typename T2,
typename T3>
606 template <
typename T1,
typename T2,
typename T3>
611 template <
typename T1,
typename T2,
typename T3>
617 template <
typename T1,
typename T2,
typename T3,
typename T4>
623 template <
typename T1,
typename T2,
typename T3,
typename T4>
629 template <
typename T1,
typename T2,
typename T3,
typename T4>
636 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
643 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
650 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
657 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
665 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
673 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
682 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
683 typename T6,
typename T7>
690 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
691 typename T6,
typename T7>
699 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
700 typename T6,
typename T7>
709 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
710 typename T6,
typename T7,
typename T8>
718 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
719 typename T6,
typename T7,
typename T8>
727 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
728 typename T6,
typename T7,
typename T8>
737 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
738 typename T6,
typename T7,
typename T8,
typename T9>
747 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
748 typename T6,
typename T7,
typename T8,
typename T9>
757 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
758 typename T6,
typename T7,
typename T8,
typename T9>
767 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
768 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
777 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
778 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
788 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
789 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
static bool pack(std::ostream &os, char val)
static bool unpack(std::istream &is, char &val)
static size_t packedSize(const char &val)
static bool pack(std::ostream &os, const std::map< Tag, Value > &m)
static bool unpack(std::istream &is, std::map< Tag, Value > &m)
static size_t packedSize(const std::map< Tag, Value > &m)
static bool unpack(std::istream &is, std::string &val)
static size_t packedSize(const std::string &val)
static bool pack(std::ostream &os, const std::string &val)
static bool unpack(std::istream &is, std::vector< I > &vec)
static size_t packedSize(const std::vector< I > &vec)
static bool pack(std::ostream &os, const std::vector< I > &vec)
static bool unpack(std::istream &is, T &val)
static bool pack(std::ostream &os, const T &val)
static size_t packedSize(const T &val)
Base class for all messages.
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6)
bool unpackParent(std::istream &) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9) const
size_t packedSize(const T &val) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10) const
bool unpack(std::istream &is, T &val) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7)
size_t packedSize(const T1 &v1, const T2 &v2) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6) const
bool pack(std::ostream &os, const T &val) const
bool packParent(std::ostream &) const
bool unpack(std::istream &is, T1 &v1, T2 &v2)
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10) const
virtual bool unpack(std::istream &) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7) const
size_t packedSizeParent(void) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7) const
virtual size_t packedSize(void) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5)
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8, T9 &v9, T10 &v10)
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8, T9 &v9)
virtual bool pack(std::ostream &) const
static bool unpack(std::istream &is, T &val)
static size_t packedSize(const T &val)
static bool pack(std::ostream &os, const T &val)
static bool unpack(std::istream &is, T &val)
static bool pack(std::ostream &os, const T &val)
static size_t packedSize(const T &val)
static bool pack(std::ostream &os, const T &val)
static size_t packedSize(const T &val)
static bool unpack(std::istream &is, T &val)
static bool unpack(std::istream &is, T &val)
static bool pack(std::ostream &os, const T &val)
static size_t packedSize(const T &val)
A class for creating a TCP client connection.
virtual int write(const void *buf, int count)
Write data to the TCP connection.
Namespace for the asynchronous programming classes.