Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename T>
- std::enable_if_t<std::is_base_of<flatbuffers::NativeTable, T>::value,
- boost::system::error_code>
- operator() (tcp::socket& socket, Message::Header const& header, T& body,
- asio::yield_context ctx) const {
- boost::system::error_code ec;
- /* TODO: Inefficient and dangerous, huzzah! */
- std::vector<unsigned char> buffer;
- buffer.resize (header.size);
- asio::async_read (socket,
- asio::buffer (buffer.data (), buffer.size ()),
- asio::transfer_exactly (buffer.size ()),
- ctx[ec]);
- if (ec) {
- return ec;
- }
- flatbuffers::Verifier fbv (buffer.data (), buffer.size ());
- if (!fbv.VerifyBuffer<typename T::TableType> ()) {
- throw std::runtime_error ("Couldn't verify flatbuffer");
- }
- auto root =
- flatbuffers::GetRoot<typename T::TableType> (buffer.data ());
- root->UnPackTo (&body);
- return ec;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement