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

Вопрос Подскажите как работать с CEF

Статус
В этой теме нельзя размещать новые ответы.

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Приветствую всех, интересен вопрос как отправлять информацию из сервера которая уже имеет формат JSON,
Как я понимаю идёт что то типо такого
Server => Client => CEF
Или я что то путаю? вот допустим я сделал такую хрень

Как правильно мне обновить информацию на CEFE



Server
C#:
var playerData = new PlayerData
            {
                playerName = "Player1",
                playerScore = 100
            };
            // Сериализуем объект в JSON строку
            string jsonData = JsonSerializer.Serialize(playerData);
            NAPI.Util.ConsoleOutput($"{jsonData},{playerData}");
            player.TriggerEvent("updatePlayerData", jsonData);

Client

JavaScript:
mp.events.add("updatePlayerData", function(jsonData) {
    console.log("Received player data from server:", jsonData);

    try {
        // Парсим строку JSON в объект
        let playerData = JSON.parse(jsonData);

        // Передаем данные в CEF
       
        browser.call('updatePlayerDataInCEF',playerData)
    } catch (error) {
        console.error("Ошибка при парсинге JSON:", error);
    }
});


JS - CEF-ки

Код:
function updatePlayerDataInCEF(data) {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
   
}
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,426
239
100
Да, вы правильно понимаете последовательность работы. По вашему коду, информация в формате JSON передается от сервера к клиенту, и затем обновляется в CEF (интерфейсе). Для обновления информации в CEF, используется функция updatePlayerDataInCEF, которая принимает объект данных JSON и обновляет соответствующие элементы на странице. Ваш код выглядит правильным для передачи и обновления информации в CEF с использованием формата JSON.
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,940
1,677
211
28
Сервер и клиент может общаться общими объектами (такими как player, например, потому что они по entityId строятся), всё остальное - ты отправляешь между друг другом только в json'е. И с клиента на CEF ты так же должен отправлять JSON. Ты делаешь JSON.parse в том случае, если тебе на клиенте нужно что-то попутно с этой информацией сделать, но дальше ПРОДОЛЖАЕШЬ отправлять JSON.

А вот регистрация ивента на CEF'е у тебя неверная. Должен быть mp.events.add.
К тому же обновлять информацию страницы с помощью getElementById как-то странно, но я не FrontEnd разработчик, поэтому по этой части не помогу.
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Вот так?
На CEFe

Код:
mp.events.add('updatePlayerDataInCEF', (jsonData) => {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
});
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,940
1,677
211
28
Ну почти.
После этого ты забыл, что тебе нужно распарсить этот самый jsonData в объект и уже с ним работать.
А то ты инициализацию метода сделал, а внутренности оставил как было. Ну и на клиенте сделать пересылку не объекта, а json'а.
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Я просто новичёк пока сложно понять что ты щас сказал
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,940
1,677
211
28
Я просто новичёк пока сложно понять что ты щас сказал
На сервере ты создал JSON строку с помощью JsonSerializer.Serialize(playerData), отправил её на клиент и на клиенте принял как аргумент jsonData, далее его распарсил (сделал JSON.parse) и отправил объект. Если тебе не нужно на клиенте ничего делать с данной информацией, которую прислал сервер, то не нужно парсить и просто передавай дальше этот же jsonData в браузер, а уже на браузере сделай JSON.parse, чтобы из строки текста получить объект, к которому далее ты можешь обращаться через точку (data.playerName).
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
А получается я убираю из клиентсвой части парсировку
и добавляю в cef
data = JSON.parse(jsonData);
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Зашёл подключил функция работает, но как отправить это всё на CEF?

причём работает не при

Код:
mp.events.add('updatePlayerDataInCEF', (jsonData) => {
    data = JSON.parse(jsonData);
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
});

Работает на дебаге только

Код:
function updatePlayerDataInCEF(data) {
    document.getElementById("playerName").innerText = data.playerName;
    document.getElementById("playerScore").innerText = data.playerScore;
    
}

Но как с клиента вызвать правильно чтоб изменения были в CEF?


Код:
mp.events.add('CEF:CLIENT::PLAYER_BACK_CURSOR', (jsonData) =>
{
    mp.gui.chat.push("Received player data: " + jsonData);
    notifyHud = mp.browsers.new('package://web/wes/index.html');
    mp.gui.execute(`updatePlayerDataInCEF(${JSON.stringify(jsonData)});`);

});
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,940
1,677
211
28
Что такое data в контексте?
Это несуществующая ячейка в памяти, в которую ты пытаешься распарсить строку, инициализируй его как-нибудь для начала, например с помощью const или let.
const data = JSON.parse(jsonData);

А вообще - это базовое программирование, тут ошибки даже не связаны с самим RAGEMP.
Для начала тебе стоит просто поизучать язык программирования в целом, потому что иначе ты на каждом шагу будешь вот так спотыкаться.
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
А как то можно посмотреть что в неё приходит? или вообще как то отрабатывается что то или нет?
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,366
810
181
34
Зачем изначально учиться на допотопных функциях? Смотри в сторону rpc
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,940
1,677
211
28
Не могу понять твоего вопроса.
В него (event) приходит то, что ты в него отправляешь, всё должно быть логично.
Что обрабатывается? Не понимаю.

Так RPC это всё то же самое, просто в обёртке.
Чтобы научиться пользоваться чем-то хорошим, для начало было бы хорошо научиться пользоваться чем-то базовым.
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,366
810
181
34
Да, я знаю что эта либа под капотом имеет rage api, я веду к тому, что новичку будет проще освоиться и писать более "чистый" код, нежели городить кучу функций в которых сам можешь запутаться.
Отправить данные с сервера на клиент, получить на клиенте и отправить в CEF, в CEF получить и отправить на клиент, на клиенте получить и отправить на сервер

А с rpc можно уменьшить эту цепочку
Сервер - CEF - Сервер
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,940
1,677
211
28
Ты прав, просто дело в том, что он пока не понимает базовых элементов, это видно по вопросам.
Такие вещи для него будут как "медвежья услуга", где он просто перескочит момент обучения и потом из-за этого встанет в ступор.
Ну, это лишь моё мнение.
 
Реакции: Inoi

Belcheezy#

Новый участник
19 Мар 2023
36
1
43


Так тут говориться про кнопку, по кнопки проблем вообще нету.
Я не могу понять почему не могу отправить данные в CEF
 

Belcheezy#

Новый участник
19 Мар 2023
36
1
43
Я уже в ступоре, так как код вроде верный, а ничего не происходит, по поводу из CEF по кнопкам тыкать и отправлять Триггеры это ясно как делать, но как мне вернуть информацию с сервера в CEF это пока вообще не понятно. почему не принимает возвратное значения.
 
Статус
В этой теме нельзя размещать новые ответы.