• Из-за обновления 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) последний раз были обновлены:

Вопрос Как работает сам RAGE:MP

if-not-skill

Участник портала
Автор темы
22 Июл 2023
7
1
8
Сейчас раскрою вопрос. Как выглядит использование моей серверной dll на c#? Скажем при запросе от пользователя, создается новый handler? или же есть лишь один instance моей серверной логики, и мне нужно будет параллелить самому? Извиняюсь за вопрос, если где-то эта тема раскрыта, хотел бы глянуть.
 

Inoi

/dev/null
VIP
15 Окт 2020
2,359
1,409
208
34
нихуя не понял как будто бы вопроса нормально, но
каждый клиентский запрос обрабатывается с помощью своего собственного экземпляра обработчика, для каждого клиента он свой, так работает ооп
рейдж или что-то ещё тут в целом не при чём

попробуй пример привести, что ты имеешь ввиду
 
  • Like
Реакции: if-not-skill

mippoosedev

Гуру
2 Мар 2021
294
139
100
Сейчас раскрою вопрос. Как выглядит использование моей серверной dll на c#? Скажем при запросе от пользователя, создается новый handler? или же есть лишь один instance моей серверной логики, и мне нужно будет параллелить самому? Извиняюсь за вопрос, если где-то эта тема раскрыта, хотел бы глянуть.
Если твой класс наследован от Script - создается 1 экземпляр, всё остальное работает так - как ты заставишь это работать.
 
  • Like
Реакции: if-not-skill

if-not-skill

Участник портала
Автор темы
22 Июл 2023
7
1
8
нихуя не понял как будто бы вопроса нормально, но
каждый клиентский запрос обрабатывается с помощью своего собственного экземпляра обработчика, для каждого клиента он свой, так работает ооп
рейдж или что-то ещё тут в целом не при чём

попробуй пример привести, что ты имеешь ввиду
ООП тут как мне кажется не причем. В рамках ооп оно могло бы работать как угодно. Я просто хотел узнать, если я буду что-то долгое делать в обработчике, то скажется ли это на обработку других пользователей. Но ты в целом ответил на мой вопрос.
Спасибо
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
ООП тут как мне кажется не причем. В рамках ооп оно могло бы работать как угодно. Я просто хотел узнать, если я буду что-то долгое делать в обработчике, то скажется ли это на обработку других пользователей. Но ты в целом ответил на мой вопрос.
Спасибо
В таком случае вопрос не в "обработчике"(по идее это объект, экземпляр класса, но пусть будет обработчик) а в потоках. Если ты заблочишь главный поток на N кол-во операций - то офк будет небольшая задержка. Если это запрос в бд/сторонний сервис выноси это в асинхронные таски
 

if-not-skill

Участник портала
Автор темы
22 Июл 2023
7
1
8
В таком случае вопрос не в "обработчике"(по идее это объект, экземпляр класса, но пусть будет обработчик) а в потоках. Если ты заблочишь главный поток на N кол-во операций - то офк будет небольшая задержка. Если это запрос в бд/сторонний сервис выноси это в асинхронные таски
То есть я правильно понимаю, что выполнение RemoveEvent'а например будет происходить в главном потоке?
 

if-not-skill

Участник портала
Автор темы
22 Июл 2023
7
1
8
Если твой класс наследован от Script - создается 1 экземпляр, всё остальное работает так - как ты заставишь это работать.
Аааа. Я не так прочитал с первого раза. Сейчас возникли вопросы. То есть создается один, вообще? Как синглтон? Или один на каждого клиента как выразился Inoi?
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Аааа. Я не так прочитал с первого раза. Сейчас возникли вопросы. То есть создается один, вообще? Как синглтон? Или один на каждого клиента как выразился Inoi?
Один, если ты хочешь получить доступ с другого объекта - сделай автосвойство Instance и в пустом конструкторе присвой Instance = this. Те самые цветные надписи при старте сервера - это и есть инициализация классов, наследуемых от script + парсинг всех евентов и команд
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
То есть я правильно понимаю, что выполнение RemoveEvent'а например будет происходить в главном потоке?
Вызов метода с атрибутом RemoteEvent - да, 99.999% из главного потока. А вот то, как он будет работать внутри - это уже другой вопрос. Рейдж имеет удивительное свойство. Даже если ты не создаешь явно новые потоки - при использовании асинхронной таски, прямо во время таски он может "перейти в другой поток". Собственно если включить api-thread-debugging, то ты увидишь варнинг посреди таски. Это достаточно странно, ведь асинхронные таски под капотом это можно сказать корутина, и без дополнительных потоков в тредпуле они не должны туда перескакивать, но у рейджа другие планы, либо я не до конца понимаю этот момент(как он работает под капотом). В любом случае, проблема асинхронных скачков по потокам решается так же, как и в любом .net приложении, либо же можно вызывать NAPI.Task.WaitForMainThread() после какого либо await (например запрос в стороннюю api)