Передача данных из файла .cpp в Objective c ViewController - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть класс с именем Client, который написан на C ++. Он получает сообщение от сервера, и всякий раз, когда сообщение принимается, я хочу показать пользователям предупреждение о том, какой текст получен? Просто нужно сообщить об этом контролерам. Я искал много блоков, я не могу найти ни одного примера. Может ли кто-нибудь дать мне пример кода для передачи данных?

В файле .cpp эта функция будет срабатывать при получении сообщения

void Client::processMessage(CMsg *message) {
    assert(message);

    Log("<- %s", message->HumanReadableDescription().c_str());
    Log("received message = %s",message->HumanReadableDescription().c_str());

    string text = receivedMeassage.substr(0, 4);
    if (text == "Text") {
        Log("Code entered");
        long position = receivedMeassage.find(":");
        string sub = receivedMeassage.substr(position+1);
        currentMessage = sub;
        receievedMessages = currentMessage;
        Log(sub);
    }
    Log(receivedMeassage);
}

Если текст получен, я хочу показать всплывающее окно пользователям.

1 Ответ

1 голос
/ 04 ноября 2019

Добавьте следующие объявления в Client.hpp:

typedef const void* Controller;
typedef void (*OnMessageProcessed)(Controller, const std::string&);

Добавьте следующие свойства в Client:

Controller messageHandler;
OnMessageProcessed onMessageProcessed;

Когда вы хотите показать всплывающее окно (например, приконец Client::processMessage) вызов onMessageProcessed(messageHandler, receivedMessage);.

Инициализируйте Client этим кодом:

Client client;
client.messageHandler = (__bridge Controller)self; // self is your UIViewController instance
client.onMessageProcessed = onMessageProcessed;

Объявите следующую глобальную функцию в YourCustomViewController.mm:

void onMessageProcessed(Controller controller, const std::string& message) {
    YourCustomViewController* viewController = (__bridge YourCustomViewController*)controller;
    [viewController onMessageProcessed:message];
}

Добавить onMessageProcessed к YourCustomViewController:

@interface YourCustomViewController: UIViewController
- (void)onMessageProcessed:(const std::string&)message;
@end

- (void)onMessageProcessed:(const std::string&)message {
    NSLog(@"%s", message.c_str());
}
...