25 Nisan 2018 Çarşamba

beast http request Sınıfı

Giriş
Şöyle yaparız.
namespace http = boost::beast::http;    
typedef http::request<http::string_body> BeastHttpRequest;
Constructor
Şöyle yaparız.
http::request<http::string_body> request;
Constructor
Şöyle yaparız.
http::request<http::empty_body> req{http::verb::get, url, 11};
fields Alanı
set() metodunu kullanmak daha iyi.
Şöyle yaparız.
req.fields.replace(hdrName, hdrValue);
keep_alive metodu
Şöyle yaparız.
request.keep_alive()
method metodu
Şöyle yaparız.
// Make sure we can handle the method
if (request.method() != http::verb::get) {
...
}
prepare_payload metodu
Örnek
Eskiden şöyle yapardık.
beast::http::prepare(req);
beast::http::write(stream, req);
Şimdi şöyle yaparız.
req.prepare_payload();
http::write(stream, req);
set metodu
Şöyle yaparız.
req.set(http::field::host, m_host);
req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
req.set(http::field::accept, "text/event-stream");
target metodu
Şöyle yaparız.
// Request path must be absolute and not contain "..".
auto target = request.target();
target metodu
Şöyle yaparız.
request.version()

beast websocket stream Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/beast/core.hpp>
#include <boost/beast/http.hpp>
#include <boost/beast/version.hpp>
#include <boost/beast/websocket.hpp>
Şu satırı dahil ederiz.
namespace websocket = boost::beast::websocket; // from <boost/beast/websocket.hpp>
constructor
Şöyle yaparız.
boost::asio::io_context ioc = ...;
 websocket::stream<tcp::socket> ws (ioc);
async_accept metodu
Örnek ver

async_close metodu
Şöyle yaparız.
ws.async_close(websocket::close_code::normal,
  std::bind( &session::on_close, shared_from_this(),
              std::placeholders::_1)
);
async_handshake metodu
Bağlanma işlemi bittikten sonra şöyle yaparız.
std::string host = ...;

ws.async_handshake(host_, "/",
  std::bind( &session::on_handshake, shared_from_this(),std::placeholders::_1 )
);
async_read metodu
Şöyle yaparız.
boost::beast::multi_buffer buffer;

ws.async_read(buffer,
  std::bind( &session::on_read, shared_from_this(),
            std::placeholders::_1, std::placeholders::_2 )
);
async_write metodu
Örnek
Şöyle yaparız.
const std::string text = ...;
ws.async_write(boost::asio::buffer(text),
  std::bind( &session::on_write, shared_from_this(),
  std::placeholders::_1, std::placeholders::_2 )
);
Örnek
Elimizde bir strand olsun.
boost::asio::strand<boost::asio::io_context::executor_type> strand;
Şöyle yaparız.
ws.async_write(buffer,
  boost::asio::bind_executor(strand,
    std::bind(&myclass::on_write, shared_from_this(),
               std::placeholders::_1, std::placeholders::_2)));

close metodu
Örnek ver

got_text metodu
Örnek ver

handshake metodu
websocket istemcisini sunucuya bağlamak için kullanılır.

next_layer metodu
Örnek
resolve işlemi bittikten sonra bağlanmak için şöyle yaparız.
tcp::resolver::results_type results = ...;
boost::asio::async_connect(ws.next_layer (),
  results.begin(), results.end(),
  std::bind( &session::on_connect, shared_from_this(),std::placeholders::_1 )

Örnek
Şöyle yaparız.
// Closing the socket cancels all outstanding operations. They
// will complete with boost::asio::error::operation_aborted
ws.next_layer().shutdown(tcp::socket::shutdown_both, ec);
ws.next_layer().close(ec);
read metodu
Şöyle yaparız.
boost::beast::multi_buffer buffer;

ws.read(buffer);
Bu çağrıdan sonra okunan veriye erişmek için şöyle yaparız.
buffer.data()
text metodu
Şöyle yaparız.
// Echo the message
ws.text(ws.got_text());
write metodu
Örnek ver