#include <ctime>
#include <iostream>
#include <boost/asio/use_future.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";
}
 
int main()
{
    using boost::asio::use_future;
 
    
    
    boost::asio::io_context ioctx;
    auto work = boost::asio::make_work_guard(ioctx);
    std::thread thread([&ioctx](){ ioctx.run(); });
 
    auto tcp = connector<Json>(ioctx, 
TcpHost(address, port));
 
 
    
    
    auto index = session->connect(use_future).get().value();
    std::cout << "Connected via " << index << std::endl;
 
    auto info = session->join(
Realm(realm), use_future).get().value();
 
    std::cout << "Joined, SessionId=" << info.id() << std::endl;
 
    auto result = session->call(
Rpc(
"get_time"), use_future).get().value();
 
    auto time = result[0].to<std::tm>();
    std::cout << "The current time is: " << std::asctime(&time) << "\n";
 
    session->subscribe(
Topic(
"time_tick"),
                       wamp::simpleEvent<std::tm>(&onTimeTick),
                       use_future).get().value();
 
    thread.join();
 
    return 0;
}