Advertisement
Guest User

Untitled

a guest
Mar 17th, 2023
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.10 KB | None | 0 0
  1. #include <chrono>
  2. #include <thread>
  3. #include <string>
  4. #include <iostream>
  5.  
  6. #include <nakama-cpp/Nakama.h>
  7. #include <nakama-cpp/log/NLogger.h>
  8. #include <nakama-cpp/realtime/NRtDefaultClientListener.h>
  9.  
  10. const std::string myUserName = "myUserName1";
  11.  
  12. auto params = Nakama::NClientParameters{
  13.         .serverKey = "defaultkey",
  14.         .host = "127.0.0.1",
  15.         .port = 7350
  16.     };
  17.  
  18. auto client = Nakama::createDefaultClient( params );
  19. Nakama::NRtClientPtr rtClient = nullptr;
  20. Nakama::NSessionPtr m_session = nullptr;
  21. uint stateMachine = 0;  // 0 - still not connected
  22.                         // 1 - connection in progress
  23.                         // 2 - connected
  24.  
  25. void onAuthSucceeded(Nakama::NSessionPtr session)
  26. {
  27.     m_session = session;
  28.  
  29.     if ( m_session->getUsername() != myUserName ) {
  30.         std::cout << "Wrong user name";
  31.     }
  32.     else if ( m_session->getVariable("test") != "value" ) {
  33.         std::cout << "Wrong value";
  34.     }
  35.     else {
  36.         std::cout << "Login succeeded. user id: " << m_session->getUserId().c_str() << std::endl;
  37.     }
  38.  
  39.     auto vars = m_session->getVariables();
  40.     for(const auto& elem : vars)
  41.     {
  42.         std::cout << elem.first << " " << elem.second << std::endl;
  43.     }
  44.  
  45.     std::cout << m_session->isRefreshExpired() << std::endl
  46.         << m_session->isCreated() << std::endl
  47.         << m_session->isExpired() << std::endl
  48.         << "ok" << std::endl;
  49.  
  50.     auto successCallback = [](const Nakama::NAccount& account)
  51.     {
  52.         std::cout << "user id     : " << account.user.id << std::endl;
  53.         std::cout << "username    : " << account.user.username << std::endl;
  54.         std::cout << "wallet      : " << account.wallet << std::endl;
  55.         std::cout << "disableTime : " << account.disableTime << std::endl;
  56.  
  57.         if ( account.verifyTime == 0 ) {
  58.             std::cout << "account still not verified" << std::endl;
  59.         }
  60.  
  61.         rtClient = client->createRtClient();
  62.         rtClient->setHeartbeatIntervalMs(500);
  63.     };
  64.  
  65.     auto errorCallback = [](const Nakama::NError& error)
  66.     {
  67.         std::cout << "Error[getAccount]: " << error.message << std::endl;
  68.     };
  69.  
  70.     client->getAccount(m_session, successCallback, errorCallback);
  71. }
  72.  
  73. int main( int argc, char ** argv )
  74. {
  75.     auto vars = Nakama::NStringMap{ { "test","value" } };
  76.  
  77.     auto clientErrorCallback = [](const Nakama::NError& error)
  78.     {
  79.         std::cout << "Error[client]: " << error.message.c_str() << std::endl;
  80.     };
  81.  
  82.     client->setErrorCallback(clientErrorCallback);
  83.  
  84.     auto authFailedCallback = [](const Nakama::NError& error)
  85.     {
  86.         std::cout << "Error[auth]: " << static_cast<int>( error.code ) << " " << error.message.c_str() << std::endl;
  87.     };
  88.  
  89.     client->authenticateEmail(
  90.         "test@test.com",
  91.         "12345678",
  92.         myUserName,
  93.         true,
  94.         vars,
  95.         std::bind(&onAuthSucceeded, std::placeholders::_1),
  96.         authFailedCallback
  97.     );
  98.  
  99.     Nakama::NRtDefaultClientListener listener;
  100.     listener.setNotificationsCallback([](const Nakama::NNotificationList & nots){
  101.         std::cout << "Notification" << std::endl;
  102.     });
  103.  
  104.     listener.setStatusPresenceCallback([](const Nakama::NStatusPresenceEvent& presence){
  105.         std::cout << "Status presence" << std::endl;
  106.     });
  107.  
  108.     listener.setStreamPresenceCallback([](const Nakama::NStreamPresenceEvent& presence){
  109.         std::cout << "Stream presence" << std::endl;
  110.     });
  111.  
  112.     listener.setStreamDataCallback([](const Nakama::NStreamData& data){
  113.         std::cout << "Stream data" << std::endl;
  114.     });
  115.  
  116.     listener.setErrorCallback([](const Nakama::NRtError& error){
  117.         std::cout << "Error: " << error.message << std::endl;
  118.     });
  119.  
  120.     listener.setDisconnectCallback([](const Nakama::NRtClientDisconnectInfo& info){
  121.         std::cout << "Disconnect: " << info.reason << std::endl;
  122.     });
  123.  
  124.     listener.setConnectCallback([]()
  125.     {
  126.         std::cout << "Connected" << std::endl;
  127.     });
  128.  
  129.     bool done = false;
  130.     while( !done )
  131.     {
  132.         client->tick();
  133.  
  134.         if ( m_session && m_session->isExpired() ) {
  135.             std::cout << "expired" << std::endl;
  136.             exit(EXIT_SUCCESS);
  137.         }
  138.  
  139.         if( rtClient )
  140.         {
  141.             rtClient->tick();
  142.  
  143.             if ( stateMachine == 2 && !rtClient->isConnected() ) {
  144.                 std::cout << "disconnected" << std::endl;
  145.                 rtClient = nullptr;
  146.             } else if ( stateMachine == 1 && rtClient->isConnected() ) {
  147.                 std::cout << "connected" << std::endl;
  148.                 stateMachine = 2;
  149.             } else if ( stateMachine == 0 ) {
  150.                 rtClient->setListener(&listener);
  151.  
  152.                 bool createStatus = true; // if the socket should show the user as online to others.
  153.                 rtClient->connect(m_session, createStatus);
  154.                 stateMachine = 1;
  155.             }
  156.         } else if ( stateMachine == 2 ) {
  157.             std::cout << "disconnected [null rtClient]" << std::endl;
  158.         }
  159.  
  160.         std::this_thread::sleep_for(std::chrono::milliseconds(50));
  161.     }
  162.  
  163.     return EXIT_SUCCESS;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement