Не считается значение 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 без ошибки?