Перезагрузка СФ плагина с websocket

AnWu

Guardian of Order
Автор темы
Всефорумный модератор
4,684
5,127
Привет. Уже пару дней не могу разгадать загадку.
Имеется:
C++:
void ws_point::init()
{
    try {
        m_endpoint.clear_access_channels(websocketpp::log::alevel::all);
        m_endpoint.clear_error_channels(websocketpp::log::elevel::all);
        m_endpoint.init_asio();
        m_endpoint.start_perpetual();
        m_thread = websocketpp::lib::make_shared<websocketpp::lib::thread>(&client::run, &m_endpoint);
        connect(wsuri);
    }
    catch (websocketpp::exception const& e) {
        SF->Log(e.what());
    }
}

void ws_point::connect(std::string& uri) {
    websocketpp::lib::error_code ec;
    client::connection_ptr con = m_endpoint.get_connection(uri, ec);

    if (ec) {
        return;
    }

    ghdl = con->get_handle();

    con->set_message_handler(bind(&type::on_message, this, ::_1, ::_2));
    con->set_open_handler(bind(&type::on_open, this, ::_1));
    con->set_close_handler(bind(&type::on_close, this, ::_1));
    con->set_fail_handler(bind(&type::on_fail, this, ::_1));
    m_endpoint.connect(con);
    connected = true;
}
Это инициализация и подключение websocket`a
C++:
void ws_point::disconnect()
{
    if (!connected)
        return;
    m_endpoint.stop_perpetual();
    websocketpp::lib::error_code ec;
    m_endpoint.close(ghdl, websocketpp::close::status::going_away, "", ec);
    if (ec) {
        return;
    }
    m_endpoint.stop();
    m_thread->detach();
}
Это дисконнект, привязан к деструктору (registerGameDestructorCallback). Всё круто срабатывает - сервер получает что игрок отключился при выгрузке плагина / выходе из игры.
Но вот текущие проблемы:
1. Нельзя загрузить плагин отложено (закинуть файл в sampfuncs и pload его). Краш.
2. Нельзя перезагрузить уже загруженный плагин. preload выгружает плагин, сервер получает диконнект, но загрузить плагин обратно не представляется возможным.

Хотел бы получить консультацию по этим вопросам.
Сам WS: https://github.com/zaphoyd/websocketpp