#include <ctime>
#include <iostream>
#include <boost/asio/awaitable.hpp>
#include <boost/asio/co_spawn.hpp>
#include <boost/asio/detached.hpp>
#include <boost/asio/use_awaitable.hpp>
const std::string realm = "cppwamp.demo.time";
const std::string address = "localhost";
const short port = 12345u;
{
template <typename TConverter>
void convert(TConverter& conv, std::tm& t)
{
conv("sec", t.tm_sec)
("min", t.tm_min)
("hour", t.tm_hour)
("mday", t.tm_mday)
("mon", t.tm_mon)
("year", t.tm_year)
("wday", t.tm_wday)
("yday", t.tm_yday)
("isdst", t.tm_isdst);
}
}
void onTimeTick(std::tm time)
{
std::cout << "The current time is: " << std::asctime(&time) << "\n";
}
{
using boost::asio::use_awaitable;
(co_await session->connect(use_awaitable)).value();
(co_await session->join(
Realm(realm), use_awaitable)).value();
auto result = (co_await session->call(
Rpc(
"get_time"),
use_awaitable)).value();
auto time = result[0].to<std::tm>();
std::cout << "The current time is: " << std::asctime(&time) << "\n";
(co_await session->subscribe(
Topic(
"time_tick"),
wamp::simpleEvent<std::tm>(&onTimeTick),
use_awaitable)).value();
}
int main()
{
auto tcp = connector<Json>(ioctx,
TcpHost(address, port));
boost::asio::co_spawn(ioctx, client(session), boost::asio::detached);
ioctx.run();
return 0;
}