heroiclabs / nakama-cpp

Generic C/C++ client for Nakama server.
https://heroiclabs.com/docs/cpp-client-guide
Apache License 2.0
69 stars 25 forks source link

Missing Nakama-C implementation in NakamaWrapper is causing Party & Matchmaking callbacks to not trigger on the listener. #46

Closed rpvela closed 2 years ago

rpvela commented 2 years ago

Problem

Implementation of the Nakama-C parties and matchmaking callbacks are missing in NakamaWrapper and can be reproduced with a simple example:

    NakamaWrapper::NClientPtr serverClient;
    NakamaWrapper:: NRtClientPtr serverRtClient;
    NakamaWrapper::NClientParameters parameters;
    NakamaWrapper::NRtDefaultClientListener serverListener;
    parameters.serverKey = "defaultkey";
    parameters.host = "localhost";
    parameters.port = 7350;
    parameters.ssl = false;
    serverClient = createDefaultClient(parameters);
    if (serverClient != nullptr) {
        std::cout << "INFO server initialized" << std::endl;
    }

    auto serverSuccessCallback = [this](const  NSessionPtr& session) {
        onServerAuthenticated(session);
    };

    constexpr bool create = true;
    const std::string serverName = "123456" + ".server";

    serverClient->authenticateCustom(serverName, serverName, create, {}, serverSuccessCallback, genericErrorCallback);

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(200));
        if (serverClient) {
            serverClient->tick();
        }

        if (serverRtClient) {
            serverRtClient->tick();
        }

        if (shouldQuit) {
            return;
        }
    }
        serverRtClient = serverClient->createRtClient(7350);
        serverListener.setConnectCallback([this](){
        auto successCallback = [this](const  NakamaWrapper::NParty& party) {
           std::cout << "INFO server party created: " << party.id << std::endl;
        };

        std::cout << "INFO server rtClient connected" << std::endl;
     serverRtClient->createParty(true, 5, successCallback, genericRtErrorCallback);
    });
        serverListener.setPartyPresenceCallback([this](const  NakamaWrapper::NPartyPresenceEvent& presenceEvent) {
        this->simpleFunction();
        std::cout << "INFO party presence event for party " << presenceEvent.partyId << std::endl;

        for (const  NakamaWrapper::NUserPresence& presence: presenceEvent.joins)
            std::cout << "INFO joins " << presence.username << " with session " << presence.sessionId << std::endl;

        for (const  NakamaWrapper::NUserPresence& presence : presenceEvent.leaves) {
            std::cout << "INFO leaves " << presence.username << " with session " << presence.sessionId << std::endl;
        }
    });

    serverRtClient->setListener(&serverListener);
    serverRtClient->connect(session, true);

Pull request details

This pull request implements:

Test

Re-running the example should fire the appropriate callback. In the future, it would be useful if more functions could be added to wrapper-tests as their test surface is pretty bare at the moment.

CLAassistant commented 2 years ago

CLA assistant check
All committers have signed the CLA.

lugehorsam commented 2 years ago

👍 thanks @rpvela