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

Вопрос Передача события

nazikshow.

Новый участник
18 Янв 2025
6
2
8
ребят всем привет, только начал разрабатывать сервер на C#, и я бы хотел в цефе вызвать событие через c#, например вывести текст ошибки, как я могу это сделать?
если быть короче - как передать событие с c# -> js
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,255
233
5
Привет! Для передачи события с C# на JS в цепочке веб-разработки можно воспользоваться технологией SignalR. SignalR позволяет организовать двустороннюю связь между сервером C# и клиентским JavaScript. Таким образом, вы сможете вызывать события на сервере и обрабатывать их на клиентской стороне. Более подробную информацию по работе с SignalR вы можете найти в документации Microsoft.
 

MADARAdev

Старожил
media
FrontEnd developer
30 Дек 2020
734
280
141
28
Привет! Чтобы нативно вызвать эвент сервера на cef стороне, тебе нужно создать клиентский эвент

Т.е. по цепочке cef -> client -> server

Чтобы вызвать эвент клиента на cef:



Если используешь библиотеку rage-rpc, можно напрямую вызвать серверный эвент в cef

Чтобы вызывать эвент сервера на cef (rage-rpc):

rpc.callServer("EventName")
 
Реакции: Harland David Sanders

nazikshow.

Новый участник
18 Янв 2025
6
2
8
а если я хочу воспользоваться функцией ExecuteJs, как мне написать запрос чтобы он вызывал метод? вот как написано у меня сейчас
C#:
openedWindow.ExecuteJs("document.dispatchEvent(new Event('enableRegisterButton'))");

openedWindow.ExecuteJs("document.dispatchEvent(new CustomEvent('set_error_text', { detail: 'Такой аккаунт уже существует.' }))");
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,780
1,580
211
28
Во-первых, я так понимаю у тебя C# клиент.
ExecuteJs вызывает конкретный код, как если бы ты его просто вписал в консоль браузера, типа ExecuteJs("console.log(bla bla bla);");

Для вызова RAGEMP Event'ов нужно использовать openedWindow.Call("названиеИвента", аргументы);
Важное уточнение, что это вызывает только те ивенты, которые зарегистрированы в CEF'е как window.mp.events.add("названиеИвента", обработчик);
 
Реакции: MADARAdev

MADARAdev

Старожил
media
FrontEnd developer
30 Дек 2020
734
280
141
28
Судя по коду я так понимаю что ты хочешь еще наоборот, с сервера триггерить какие либо cef events.

Для этого ты по той же схеме должен создать event на клиенте и в cef, далее вызвать на сервере клиентский events ,
и на клиенте вызывать cef событие

На клиентской стороне события cef вызываются вот так:
mp.events.call("EventName")
 

nazikshow.

Новый участник
18 Янв 2025
6
2
8
извините, может чего не понимаю, но вот мой код js
C#:
mounted() {
            document.addEventListener("set_error_text", (event) => {
                this.error.text = event.detail; // Устанавливаем текст ошибки из C#
              });
            document.addEventListener("enableAuthButton", this.enableAuthButton);
            document.addEventListener("enableRegisterButton", this.enableRegisterButton);

        },
        beforeUnmount() {
          // Удаляем обработчик при уничтожении компонента
          document.removeEventListener("set_error_text", (event) => {
            this.error.text = event.detail;
          });
          document.removeEventListener("enableAuthButton", this.enableAuthButton);
          document.removeEventListener("enableRegisterButton", this.enableAuthButton);
        },
methods: {
enableAuthButton() {
                const button = document.querySelector('.js-btn-auth');
                if (button) button.disabled = false;
            },
            enableRegisterButton() {
                const button = document.querySelector('.btn.purple');
                if (button) button.disabled = false;
            },
}
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,780
1,580
211
28
извините, может чего не понимаю, но вот мой код js
C#:
            document.addEventListener("set_error_text", (event)
Это не RAGEMP event. Чтобы добавить RAGEMP event нужно использовать
JavaScript:
window.mp.events.add("set_error_text", (text) =>
{
    // Делаешь что хочешь с текстом, который ты получил
});
 
Реакции: MADARAdev и nazikshow.

MADARAdev

Старожил
media
FrontEnd developer
30 Дек 2020
734
280
141
28
Не используй document.addEventListener для связи Rage MP API

Создаешь события в cef так:

mp.events.add('"EventName", () => {
// Todo
})
 

nazikshow.

Новый участник
18 Янв 2025
6
2
8
Не используй document.addEventListener для связи Rage MP API

Создаешь события в cef так:
если я всё правильно понял, мне нужно написать так:
JavaScript:
mounted() {
        //
        if (window.mp && window.mp.events) {
            window.mp.events.add("set_error_text", (text) => {
                this.error.text = text;
                this.isProcessing = false; // Разблокируем кнопку после ошибки
            });
        }
просто я с ютуба переписываю
 

MADARAdev

Старожил
media
FrontEnd developer
30 Дек 2020
734
280
141
28
Да! Теперь верно