У меня есть клиент, который подключается к серверу и ждет ответа о состоянии подключения. Если сервер меняет статус, он отправляет сообщение клиенту.
Сначала клиент регистрируется в функции RegisterConnectionStatusDelegate
, которая определяется следующим образом:
MNS_SDK_API void RegisterConnectionStatusDelegate(void (CALLBACK *cb)(int idx, int status));
The CALLBACK is defined in another class as: #define CALLBACK __stdcall
The MNS_SDK_API is defined in in another class as: #define MNS_SDK_API __declspec(dllimport)
У меня вопрос, как правильно использовать эту функцию RegisterConnectionStatusDelegate
в моем приложении.
Моя текущая реализация выглядит так:
main.cpp
#include "test.h"
int main(int argc, char const *const *argv)
{
test *client = new test();
client->init();
}
test.h
class test: public CMnsApp
{
public:
test();
~test();
void init();
void connectToServer(const char *, const char *, int);
void (CALLBACK *connectionStatus)(int idx, int status);
private:
CMnsApp *app;
};
test.cpp
#include "test.h"
#include <WinUser.h>
#include <Windows.h>
void CALLBACK connectionStatus(int idx, int status)
{
if (status == 0)
std::cout << "Connection OFF\n" << std::endl;
else if (status == 1)
std::cout << "Connection OK\n" << std::endl;
else
std::cout << "Connection status UNKNOWN\n" << std::endl;
}
void test::init()
{
app = new CMnsApp();
connectToServer("testClient", "localhost", 1390);
// Process Windows events. typedef struct tagMSG in WinUser.h
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
void test::connectToServer(const char *clientName, const char* hostName, int port)
{
RegisterConnectionStatusDelegate(connectionStatus);
app->InitMnsClientApp(clientName, hostName, port);
}
Если я запускаю приведенный выше код, после создания соединения он зацикливается на while
, но не вызывает функцию connectionStatus
Спасибо за любые предложения