• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Проблема Проблема пересылки данных. Локально работает, на сервере нет.[Не актуальна]

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
Приветствую, буду благодарен за помощь.
Ситуация следующая:
Я новичок в разработке сервера. Сделал страницы регистрации и авторизации. Добавил вывод в консоль действий. что бы отслеживать что происходит. Столкнулся с проблемой:
локально при запуске сервера и последующей регистрации или авторизации все проходит без проблем. БД удаленная и стоит на сервере. данные беру их нее.
Вот скрины локального выполнения:
1705086267604.png
1705086299183.png
1705086375441.png
1705086350003.png


На сервере же почему-то при попытке зарегистрироваться или авторизоваться, просто меняется состояние кнопки(тут так и должно быть, что бы не было спама в БД) НО запрос до сервера как будто НЕ доходит, потому как в консоли сервера абсолютно ничего нет:

1705086485341.png
1705086582785.png


Локально стоит windows.
на сервере Debian 11

Проверил firewall вроде как выключен:
systemctl status nftables
1705086712880.png


Очень нужна ваша помощь.
Спасибо заранее
 
Последнее редактирование:

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
866
1,158
5
Привет! К сожалению, на скриншотах ничего не видно. Сначала убедитесь, что ваш сервер правильно настроен для подключения к удаленной базе данных. Проверьте правильность адреса, имени пользователя и пароля для подключения к базе данных. Также убедитесь, что на удаленном сервере разрешено подключение с вашего локального IP-адреса. Если проблема остается, покажите код, который отвечает за подключение к базе данных, чтобы мы могли помочь вам более конкретно.
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
Привет! К сожалению, на скриншотах ничего не видно. Сначала убедитесь, что ваш сервер правильно настроен для подключения к удаленной базе данных. Проверьте правильность адреса, имени пользователя и пароля для подключения к базе данных. Также убедитесь, что на удаленном сервере разрешено подключение с вашего локального IP-адреса. Если проблема остается, покажите код, который отвечает за подключение к базе данных, чтобы мы могли помочь вам более конкретно.
По поводу БД. Она на том же сервере, что и код.
Проверьте правильность адреса, имени пользователя и пароля для подключения к базе данных.
Тут 100% все верно запросы доходят до БД, создают и получают записи.
Также убедитесь, что на удаленном сервере разрешено подключение с вашего локального IP-адреса
Я подключаюсь к серверу и если убрать WEB интерфейс с 22006 порта, то по udp на 22005 я спокойно попадаю в игру(на сервер). Так же и другой человек заходит(просил проверить).
Если проблема остается, покажите код, который отвечает за подключение к базе данных, чтобы мы могли помочь вам более конкретно.
Проблема не в БД. Проблема в том, что запрос после того как я нажимаю кнопку Авторизация на WEB интерфейсе не доходит до сервера абсолютно.

Вот метод, который принимаем ивенты от WEB:

C#:
public Main() {
    Events.OnPlayerReady += OnPlayerReady;
    Events.OnPlayerSpawn += OnPlayerSpawn;
    Events.OnPlayerCreateWaypoint += OnPlayerCreateWaypoint;
    Events.Add("closeBrowser", OnCloseBrowserMessage);


    Events.Add("CEF:CLIENT::REGISTER_BUTTON_CLICKED", OnCefRegisterButtonClicked);
    Events.Add("CEF:CLIENT::LOGIN_BUTTON_CLICKED", OnCefLoginButtonClicked);


    Events.Add("SERVER:CLIENT::REGISTER_USER", OnServerRegisterUser);
    Events.Add("SERVER:CLIENT::LOGIN_USER", OnServerLoginUser);
}

Это метод, который вызывает уже метод с обращением в БД.


C#:
public void OnCefLoginButtonClicked(object[] args)
    {
        string username = args[0].ToString();
        string password = args[1].ToString();


        Events.CallRemote("CLIENT:SERVER::LOGIN_BUTTON_CLICKED", username, password);
    }

Вот метод получения данных из БД:


C#:
[RemoteEvent("CLIENT:SERVER::LOGIN_BUTTON_CLICKED")]
public async void OnCefLoginButtonClicked(Player player, string username, string password)
{
    NAPI.Util.ConsoleOutput("Делаю попытку подключения к БД");
    string selectQuery = "SELECT * FROM users WHERE name = @name";
    MySqlCommand selectCommand = new MySqlCommand(selectQuery);
    selectCommand.Parameters.AddWithValue("@name", username);
    DataTable tb = await MySQL.QueryReadAsync(selectCommand);
    NAPI.Util.ConsoleOutput("Запрос выполнен");

    if (tb.Rows.Count == 0)
    {
        NAPI.Util.ConsoleOutput("Такого пользователя не существует");
        NAPI.Task.Run(() =>
        {
            NAPI.ClientEvent.TriggerClientEvent(player, "SERVER:CLIENT::LOGIN_USER", true);
        }, 1000);
    }
    else
    {
        NAPI.Util.ConsoleOutput("Пользователь найден, проверяю пароль");
        string outUsername = tb.Rows[0].ItemArray[1].ToString();
        string outPassword = tb.Rows[0].ItemArray[2].ToString();

        if (outPassword != password)
        {
            NAPI.Util.ConsoleOutput("Пароли не совпадают");
            NAPI.Task.Run(() =>
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "SERVER:CLIENT::LOGIN_USER", true);
            }, 1000);
        }
        else
        {
            NAPI.Util.ConsoleOutput("Пароли совпадают");
            NAPI.Task.Run(() =>
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "SERVER:CLIENT::LOGIN_USER", false);
            }, 1000);
        }
    }
}

Локально вызов метода внутри Main проходит без проблем, на сервере нет.
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3

Inoi

/dev/null
VIP
15 Окт 2020
2,363
1,412
208
34
ну если не выполняется не только дотнет - повесь себе принты везде

вот здесь например можно параллельно вызвать какой нибудь лог

1705090566302.png


Ты подключаешься к одной и той же бд? Просто в первом случае - удалённо, а во втором - по локалхосту?
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
ну если не выполняется не только дотнет - повесь себе принты везде

вот здесь например можно параллельно вызвать какой нибудь лог

Посмотреть вложение 12012

Ты подключаешься к одной и той же бд? Просто в первом случае - удалённо, а во втором - по локалхосту?


Вот класс серверной части, который локально отрабатывает, а на удаленном сервере нет:

C#:
public class Main : Events.Script
{
    HtmlWindow openedWindow;


    public Main() {
        Events.OnPlayerReady += OnPlayerReady;
        Events.OnPlayerSpawn += OnPlayerSpawn;
        Events.OnPlayerCreateWaypoint += OnPlayerCreateWaypoint;
        Events.Add("closeBrowser", OnCloseBrowserMessage);
        


        Events.Add("CEF:CLIENT::REGISTER_BUTTON_CLICKED", OnCefRegisterButtonClicked);
        Events.Add("CEF:CLIENT::LOGIN_BUTTON_CLICKED", OnCefLoginButtonClicked);


        Events.Add("SERVER:CLIENT::REGISTER_USER", OnServerRegisterUser);
        Events.Add("SERVER:CLIENT::LOGIN_USER", OnServerLoginUser);
    }


вот кусок кода, который на WEB интерфейсе вызывает Ивент:
JavaScript:
const onLoginButtonClick = () => {
    if (loginBtnState === "ЗАГРУЗКА") return;
    setNotify("");

    const usernamePattern = /^[a-zA-Z0-9]{3,30}$/
    if (!loginUsername.match(usernamePattern)) {
        setNotify("Логин должен состоять из латинских букв и цифр");
        return;
    }
    if (loginUsername.length < 3 || loginUsername.length > 30) {
        setNotify("Логин должен быть от 3 до 30 символов");
        return;
    }

    const passwordPattern = /^[A-Za-z\d!@#№$%^&*()_+\]{};':"\\|,.<>?`~\-]{6,20}$/
    if (!loginPassword.match(passwordPattern)) {
        setNotify("Пароль должен состоять из латинских букв, символов и цифр");
        return;
    }
    if (loginPassword.length < 6 || loginPassword.length > 20) {
        setNotify("Пароль должен быть от 6 до 20 символов");
        return;
    }

    setLoginBtnState("ЗАГРУЗКА");
    mp.trigger("CEF:CLIENT::LOGIN_BUTTON_CLICKED", loginUsername, loginPassword);
}

Как можно заметить ВОТ этот ивент: CEF:CLIENT::LOGIN_BUTTON_CLICKED запускает логику на серверной части.
НО этот ивент локально запускается, а на сервере нет.
Я так понимаю, что WEB интерфейс на 22006 порту работает по HTTP, сам сервак на 22005 по UDP. И Судя по всему что-то мешает им общаться. НО что я на понимаю. В коде проблем нет.

Локально все РАБОТАЕТ! Проблема в передаче данных между портами.
Linux Debian 11 стоит, что проверить можно?
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
В итоге развернул развернул новый сервер. Windows Server и все переделал на него. Предполагаю, что проблема была в том, что локально сервер собирался под винду и запускался на ней, а удаленный сервер был на linux.

Не смог найти, как закрыть тему, что она решена. Если кто-то может, то подскажите.
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Вот класс серверной части, который локально отрабатывает, а на удаленном сервере нет:

C#:
public class Main : Events.Script
{
    HtmlWindow openedWindow;


    public Main() {
        Events.OnPlayerReady += OnPlayerReady;
        Events.OnPlayerSpawn += OnPlayerSpawn;
        Events.OnPlayerCreateWaypoint += OnPlayerCreateWaypoint;
        Events.Add("closeBrowser", OnCloseBrowserMessage);
      


        Events.Add("CEF:CLIENT::REGISTER_BUTTON_CLICKED", OnCefRegisterButtonClicked);
        Events.Add("CEF:CLIENT::LOGIN_BUTTON_CLICKED", OnCefLoginButtonClicked);


        Events.Add("SERVER:CLIENT::REGISTER_USER", OnServerRegisterUser);
        Events.Add("SERVER:CLIENT::LOGIN_USER", OnServerLoginUser);
    }


вот кусок кода, который на WEB интерфейсе вызывает Ивент:
JavaScript:
const onLoginButtonClick = () => {
    if (loginBtnState === "ЗАГРУЗКА") return;
    setNotify("");

    const usernamePattern = /^[a-zA-Z0-9]{3,30}$/
    if (!loginUsername.match(usernamePattern)) {
        setNotify("Логин должен состоять из латинских букв и цифр");
        return;
    }
    if (loginUsername.length < 3 || loginUsername.length > 30) {
        setNotify("Логин должен быть от 3 до 30 символов");
        return;
    }

    const passwordPattern = /^[A-Za-z\d!@#№$%^&*()_+\]{};':"\\|,.<>?`~\-]{6,20}$/
    if (!loginPassword.match(passwordPattern)) {
        setNotify("Пароль должен состоять из латинских букв, символов и цифр");
        return;
    }
    if (loginPassword.length < 6 || loginPassword.length > 20) {
        setNotify("Пароль должен быть от 6 до 20 символов");
        return;
    }

    setLoginBtnState("ЗАГРУЗКА");
    mp.trigger("CEF:CLIENT::LOGIN_BUTTON_CLICKED", loginUsername, loginPassword);
}

Как можно заметить ВОТ этот ивент: CEF:CLIENT::LOGIN_BUTTON_CLICKED запускает логику на серверной части.
НО этот ивент локально запускается, а на сервере нет.
Я так понимаю, что WEB интерфейс на 22006 порту работает по HTTP, сам сервак на 22005 по UDP. И Судя по всему что-то мешает им общаться. НО что я на понимаю. В коде проблем нет.

Локально все РАБОТАЕТ! Проблема в передаче данных между портами.
Linux Debian 11 стоит, что проверить можно?
действительно, что же может им мешать общаться
1705195518422.png
советую хоть раз открыть вики и поставить нормальный порт для веба(не понимаю чем 80/8080/443 не подошел)
UPD::это я именно про веб, про то, почему не доходят запросы - советую везде добавить пуши в чат/в консоль и смотреть на каком моменте и что обрывается
 

akudinov28

Гуру
24 Фев 2021
262
119
105
действительно, что же может им мешать общаться
Посмотреть вложение 12042советую хоть раз открыть вики и поставить нормальный порт для веба(не понимаю чем 80/8080/443 не подошел)
UPD::это я именно про веб, про то, почему не доходят запросы - советую везде добавить пуши в чат/в консоль и смотреть на каком моменте и что обрывается
Как я понял, автор под ВЕБом подразумевает именно CEF. Причем тут 80/443?
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
Как я понял, автор под ВЕБом подразумевает именно CEF. Причем тут 80/443?
Именно так. Я пока новичок в rage mp. И люди упорно не хотят прочитать. У них есть свое мнение и все тут)) Советует добавить пуши в консоль, а ту часть где я написал что серверная часть не вызывается и никакое логирование не отработает - это все им мало интересно)) Потому как уже решил, что напишет про 80 порт, а надо или нет - это дело десятое))
 

akudinov28

Гуру
24 Фев 2021
262
119
105
Именно так. Я пока новичок в rage mp. И люди упорно не хотят прочитать. У них есть свое мнение и все тут)) Советует добавить пуши в консоль, а ту часть где я написал что серверная часть не вызывается и никакое логирование не отработает - это все им мало интересно)) Потому как уже решил, что напишет про 80 порт, а надо или нет - это дело десятое))
Советую попробовать использовать CEF Debug, на этом форуме где-то есть. Начни с логирования каждого действия в CEF, возможно, там где-то вываливается ошибка. Пробуй пока вместо вызова сервера просто console.log('test'); без всяких данных на этапе нажатия кнопки, и продвигайся далее. Если в CEF всё работает, попробуй вызвать клиент, а не сервер. В качестве теста попробуй изменить названия методов и прослушивателей на более простые. Двигайся поэтапно, и тогда всё получится. Я бы помог, но я не работаю с C#.

Ссылка на CEF Debugger: https://ragemp.pro/resources/rage-mp-cef-debug-chromium-embedded-framework-cef.305/
P.S. Судя по мануалу, CEF использует локальный порт 9222. Если у тебя есть уверенность в том, что проблема на сетевом уровне, тогда смотри в сторону снифферов траффика, по типу wireshark. Просмотри траффик на хостинге, куда и какие обращения идут, и доходят ли.
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Как я понял, автор под ВЕБом подразумевает именно CEF. Причем тут 80/443?
Если веб/сеф у него работает на 22006 порте, то мои слова про порты - очень даже актуальны. Другой вопрос в том, почему просто локально в клиентских файлах не хранит файлы сефа. Ну и попутный вопрос - а чем тебя 80/443 не устраивают? Стандартные порты)
 

akudinov28

Гуру
24 Фев 2021
262
119
105
Если веб/сеф у него работает на 22006 порте, то мои слова про порты - очень даже актуальны. Другой вопрос в том, почему просто локально в клиентских файлах не хранит файлы сефа. Ну и попутный вопрос - а чем тебя 80/443 не устраивают? Стандартные порты)
Если я правильно понял автора (а выше он вроде подтвердил это), то веб/цеф у него и размещен локально в клиентских файлах, стандартно. Про цеф на 22006 это было его предположение (ошибочное), не больше. Соответственно, повторюсь: причем здесь стандартные http/https порты, если они не используются автором никак?
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Если я правильно понял автора (а выше он вроде подтвердил это), то веб/цеф у него и размещен локально в клиентских файлах, стандартно. Про цеф на 22006 это было его предположение (ошибочное), не больше. Соответственно, повторюсь: причем здесь стандартные http/https порты, если они не используются автором никак?
А, ну судя по моим словам выше - я подумал, что он свой веб сервер поднимает на 22006(поэтому и написал про хранение локально постом выше), тогда вопросов никаких нет)
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
Советую попробовать использовать CEF Debug, на этом форуме где-то есть. Начни с логирования каждого действия в CEF, возможно, там где-то вываливается ошибка. Пробуй пока вместо вызова сервера просто console.log('test'); без всяких данных на этапе нажатия кнопки, и продвигайся далее. Если в CEF всё работает, попробуй вызвать клиент, а не сервер. В качестве теста попробуй изменить названия методов и прослушивателей на более простые. Двигайся поэтапно, и тогда всё получится. Я бы помог, но я не работаю с C#.

Ссылка на CEF Debugger: https://ragemp.pro/resources/rage-mp-cef-debug-chromium-embedded-framework-cef.305/
P.S. Судя по мануалу, CEF использует локальный порт 9222. Если у тебя есть уверенность в том, что проблема на сетевом уровне, тогда смотри в сторону снифферов траффика, по типу wireshark. Просмотри траффик на хостинге, куда и какие обращения идут, и доходят ли.
В общем все делал по инструкции, но у меня почему-то так.
1705537390008.png
 

biz_maker

Новый участник
Автор темы
12 Янв 2024
11
1
3
В реестре порт прописал? В теме, где я скинул, есть ссылка на инструкцию. А на сервере тоже нужно включить режим debug.
Все сделал.
1705568808164.png
1705568871219.png



Запускал сервер и из visual studio в debug. И просто сам сервер без студии. Одинаковая ситуация что в первом что во втором случае. Что может быть такое?