Не считается значение userData в главной функции

Я писал на одном интенсиве сервер на С++. Всё шло хорошо, но в одной переменной в главной функции не считывается значение userData, которая кстати была объявлена в коде ранее. Хотел создать переменную внутри главной функции, но получаю ещё больше ошибок. Что делать с этим значением Код:

#include <iostream>
#include <uwebsockets/App.h>

using namespace std;

const string MESSAGE_TO = "MESSAGE_TO::";

string parseUserId(string message) {
    string rest = message.substr(MESSAGE_TO.size());
    int pos = rest.find("::");
    return rest.substr(0, pos);
}

string parseUserText(string message) {
    string rest = message.substr(MESSAGE_TO.size());
    int pos = rest.find("::");
    return rest.substr(pos+2);
}

bool isMessageTo(string message) {
    return message.find(MESSAGE_TO) == 0;
}

string messageFrom(string user_id, string message) {
    return "MESSAGE_FROM::" + user_id + "::" + message;
}

int main() {

    struct PerSocketData                               //хранение информации о пользователе
    {
        string name;                                   //имя пользователя
        unsigned int user_id;                          //его идентификатор
    };

    unsigned int last_user_id = 100;                    //последний id пользователя

    //настраиваем сервер
    uWS::App().                                         //создаём простое приложение
        ws<PerSocketData>("/*", {                       //для каждого пользователя мы храним данные в виде PerSocketData
            .idleTimeout = 1200,                        //таймаут в секундах
            .open = [&last_user_id](auto* ws) {
                //Вызывается при открытии соединения
                PerSocketData* userData = (PerSocketData*) ws->getUserData();
                userData->name = "UNNAMED";
                userData->user_id = last_user_id++;
                cout << "New user connected, id: " << userData->user_id << endl;

                ws->subscribe("user#" + to_string(userData->user_id));
                ws->subscribe("broadcast");
            },
            .message = [](auto* ws, std::string_view message, uWS::OpCode opCode) {
                string strMessage = string(message);
                if (isMessageTo(strMessage)) {       //обработать сообщение и переслать его получателю
                    //подготовить данные
                    string receiverId = parseUserId(strMessage);
                    string text = parseUserText(strMessage);

                    string senderId = to_string(userData->user_id);
                    string outgoingMessage = messageFrom(senderId, text);
                    //отправить получателю
                    ws->publish("user#" + receiverId, outgoingMessage, uWS::OpCode::TEXT, false);

                    ws->send("Message sent", uWS::OpCode::TEXT);

                    cout << "User#" << senderId << " wrote message to " << receiverId << endl;
                }
                
                //ws->send(message, opCode, true);
                //Вызывается при получении сообщения от пользователя
            },
            .close = [](auto*/*ws*/, int /*code*/, std::string_view /*message*/) {  //Вызывается при отключении от сервера
            }
            })
            .listen(9116, [](auto* listen_socket) {
                if (listen_socket) {                                                //Если всё хорошо, вывести сообщение (ниже)
                    std::cout << "Listening on port " << 9116 << std::endl;
                }
            }).run();       //ЗАПУСК
}

Выслал весь код целиком, чтобы вам было не сложно ориентироваться. Ошибка там, где объявлена переменная senderId. Как мне вывести userData без ошибки?


Ответы (0 шт):