This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос Как работать с CEF в ragemp 1.1 на C#?

LANAK

Новый участник
8 Окт 2021
23
0
39
Здравствуйте, я ознакамливаюсь с разработкой сервера на C#, запустил всё работает, но хочу подключить веб, но не могу найти информации как это сделать под C# в ragemp 1.1
Подскажите пожалуйста, как это делается.
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Реакции: XDeveluxe и LANAK

LANAK

Новый участник
8 Окт 2021
23
0
39
Выдает ошибку: Object reference not set to an instance of an object.

C#:
RAGE.Ui.HtmlWindow CEF;

        public void createBrowser(bool toggle, string way)
        {
            CEF = new RAGE.Ui.HtmlWindow(way); // Creating of browser ( way = "package://cs_packages/test.html" )
            CEF.Active = toggle;
        }

        public void urlBrowser(string url)
        {
            CEF.Url = url; // Changing url of browser
        }

        [Command("test", "Открываем браузер")]
        private void Test(Player player)
        {
            createBrowser(true, "package://cs_packages/test.html");
        }

Вопрос, какая должна быть иерархия у сервера, чтобы это работало?

Мод у меня компилируется в папку C:\RAGEMP\server-files\dotnet\resources\testmode
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Выдает ошибку: Object reference not set to an instance of an object.
RAGE.Ui.HtmlWindow выполняется на клиенте
 
Реакции: LANAK

LANAK

Новый участник
8 Окт 2021
23
0
39
А как правильно разделить клиент и сервер, чтобы это работало?
И возможно ли подключить например тот же React, когда сервер использует C#?
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Клиент и сервер разрабатывается отдельно друг от друга, сервер может быть на c# а клиент на жс, и на оборот, или и то и то на одном языке, rage-sharpN.dll это библиотека c# для клиента, клиентские .cs файлы закидуются на клиент как и жс, почитай доку
 

LANAK

Новый участник
8 Окт 2021
23
0
39
А можно пример пожалуйста, как например обратиться от сервера к клиенту, например через команду написать на клиенте сообщение в чат или открыть браузер.
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Если чат стандартный то самый простой способ отправить сообщение через команду это на сервере подписаться на событие команд
C#:
        [GTANetworkAPI.Command("msg")]
        public void cmd_msg(GTANetworkAPI.Player player, string msg)
        {
            player.SendChatMessage(msg);
        }
Но что бы открыть браузер или выполнить какую то другую команду сервера на клиенте тебе нужны ивенты вот как они создаются на клиенте, а вызываются из сервера через TriggerEvent
C#:
[GTANetworkAPI.Command("msg")]
        public void cmd_msg(GTANetworkAPI.Player player, string msg)
        {
            player.TriggerEvent("youEventName", "param1", 777, 0.2);
        }
 
Реакции: LANAK

LANAK

Новый участник
8 Окт 2021
23
0
39
Я сделал страницу тестовую, сделал отображение курсора, но курсор не взаимодействует с элементами, делал тестовый drag & drop.
Но со стандартными элементами input, кнопками, полем для ввода работает, в чем проблема и как это исправить?
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Без поняти, слышал там какие то проблемы есть с drag & drop но это не точно. Я браузером вообще не пользуюсь
 

LANAK

Новый участник
8 Окт 2021
23
0
39
Можно ещё пример отправки данных с CEF на клиент с параметрами, как отправлять я вроде понимаю, а вот как на клиентской стороне C# принимать, пока не ясно, есть догадки, но хотелось бы увидеть как правильно.
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Просто тригер создаешь на клиенте через RAGE.Events.Add и с cef вызываешь его через mp.trigger
C#:
RAGE.Events.Add("myCefTrigger", cefTrigger);

C#:
        private void cefTrigger(object[] args)
        {
            int arg1 = (int)args[0];
            string arg2 = (string)args[1];
            float arg3 = (float)args[2];
            bool arg4 = (bool)args[3];
            
        }
JavaScript:
mp.trigger('myCefTrigger', 777, "Hello World", 0.5, false);
 
Реакции: SLAYER и LANAK