Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. template <typename T>
  2. std::enable_if_t<std::is_base_of<flatbuffers::NativeTable, T>::value,
  3. boost::system::error_code>
  4. operator() (tcp::socket& socket, Message::Header const& header, T& body,
  5. asio::yield_context ctx) const {
  6. boost::system::error_code ec;
  7.  
  8. /* TODO: Inefficient and dangerous, huzzah! */
  9. std::vector<unsigned char> buffer;
  10. buffer.resize (header.size);
  11.  
  12. asio::async_read (socket,
  13. asio::buffer (buffer.data (), buffer.size ()),
  14. asio::transfer_exactly (buffer.size ()),
  15. ctx[ec]);
  16. if (ec) {
  17. return ec;
  18. }
  19.  
  20. flatbuffers::Verifier fbv (buffer.data (), buffer.size ());
  21. if (!fbv.VerifyBuffer<typename T::TableType> ()) {
  22. throw std::runtime_error ("Couldn't verify flatbuffer");
  23. }
  24.  
  25. auto root =
  26. flatbuffers::GetRoot<typename T::TableType> (buffer.data ());
  27. root->UnPackTo (&body);
  28. return ec;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement