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

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается 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/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

owner31
Команда форума
Moderator
VIP
15 Окт 2020
5,186
2,722
208
36
нихуя не понял как будто бы вопроса нормально, но
каждый клиентский запрос обрабатывается с помощью своего собственного экземпляра обработчика, для каждого клиента он свой, так работает ооп
рейдж или что-то ещё тут в целом не при чём

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

mippoosedev

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

if-not-skill

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

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

mippoosedev

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

if-not-skill

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

if-not-skill

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

mippoosedev

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

mippoosedev

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