Обмен по вебсокету с сервером¶
Примечание
Этот материал находится в состоянии наполнения информацией.
Получаем данные с сервера и обновляем данные на сервере через вебсокет. Т.к. по вебсокету идёт постоянная отправка и получение данных без ожидания ответа, то у каждого запроса должен быть уникальный номер для идентификации ответа на него. Для этого у нас есть функция get_current_query_id(), которая возвращает очередной уникальный id. Функция находится в автозагруженном синглтоне Net. Построение самих запросов осуществляется согласно инструкции: После подготовки запроса необходимо подготовить правильную команду для отправки на сервер. Рассмотрим на примере (res://blokoj/kosmosxipoj/skriptoj/moduloj/queries.gd):
func volumeno_shanghi(uuid, volumenoInterna, volumenoEkstera, volumenoStokado):
var id = Net.get_current_query_id()
Net.net_id_clear.push_back(id)
return JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'mutation ($uuid:UUID, $volumenoInterna:Float, '+
" $volumenoEkstera:Float, $volumenoStokado:Float) "+
" { redaktuUniversoObjekto (uuid:$uuid, volumenoInterna:$volumenoInterna, "+
" volumenoEkstera:$volumenoEkstera, volumenoStokado:$volumenoStokado) "+
' {status message universoObjektoj{ uuid } } }',
'variables': {"uuid": uuid, "volumenoInterna":volumenoInterna,
"volumenoEkstera":volumenoEkstera, "volumenoStokado":volumenoStokado } }})
В данном примере идёт отправка запроса на изменение объекта Универсо с параметрами. Т.к. ответ может нас не интересовать (как в данном случае, т.к. ответ придёт всем по подписке), мы можем сбросить анализ ответа при добавлении нашего уникального номера в массив net_id_clear. В JSON- строке type, id и payload - обязательные составляющие. Свой запрос мы вставляем после query, заменяя mutation и далее. Для анализа ответа нам необходимо подключить сигнал для отработки. Подключается в функции _ready ноды:
var err = Net.connect("input_data", self, "_on_data")
if err:
print('error = ',err)
Далее в указанной нами функции (в данном случае _on_data) прописываем обработчик:
var i_data_server = 0
for on_data in Net.data_server:
if id_test == int(on_data['id']):
print('===id_test==',on_data)
id_test = 0
Net.data_server.remove(i_data_server)
i_data_server += 1
Все ответные данные приходят в массиве data_server синглтона Net, его мы и анализируем. В данном примере показан вывод на экран отладки программы ответа, пришедшего с сервера согласно нашего уникального id (в данном случае - id_test) Ответ приходит в JSON-формате. Обращение по [„имя поля“].