Коммит bac9682c создал по автору magcourier's avatar magcourier
Просмотр файлов

Merge branch 'develop' into 'develop'

Исправление по астероиду и начало вебсокета

See merge request tehnokom/universo!138
владельцы 119fd90f 65fdea9c
Это отличие свёрнуто
...@@ -12,8 +12,11 @@ func _ready(): ...@@ -12,8 +12,11 @@ func _ready():
Net.connect("connection_failed", self, "_on_connection_failed") Net.connect("connection_failed", self, "_on_connection_failed")
Net.connect("connection_succeeded", self, "_on_connection_success") Net.connect("connection_succeeded", self, "_on_connection_success")
Net.connect("server_disconnected", self, "_on_server_disconnect") Net.connect("server_disconnected", self, "_on_server_disconnect")
Net.connect("players_updated", self, "update_players_list") # Net.connect("connection_failed", self, "_on_connection_failed")
Net.my_name = Global.login # Net.connect("connection_succeeded", self, "_on_connection_success")
# Net.connect("server_disconnected", self, "_on_server_disconnect")
# Net.connect("players_updated", self, "update_players_list")
# поднимаем соединение по вебсокету
Net.connect_to_server() Net.connect_to_server()
# Создаём объект с данными для запросов. # Создаём объект с данными для запросов.
...@@ -23,7 +26,7 @@ func _ready(): ...@@ -23,7 +26,7 @@ func _ready():
# Ответ будет обрабатываться в функции get_direktebla_request_complete # Ответ будет обрабатываться в функции get_direktebla_request_complete
var error = Title.get_node("request").request(q.URL, Global.backend_headers, true, 2, var error = Title.get_node("request").request(q.URL, Global.backend_headers, true, 2,
q.get_direktebla_query(2, 3, 2)) q.get_direktebla_query(2, 3, 2))
Net.send_data(q.get_direktebla_query(2, 3, 2))
# Если запрос не выполнен из-за какой-то ошибки # Если запрос не выполнен из-за какой-то ошибки
# TODO: Такие ошибки наверное нужно как-то выводить пользователю? # TODO: Такие ошибки наверное нужно как-то выводить пользователю?
if error != OK: if error != OK:
...@@ -33,6 +36,7 @@ func _ready(): ...@@ -33,6 +36,7 @@ func _ready():
# Обработчик сигнала "connection_succeeded" # Обработчик сигнала "connection_succeeded"
func _on_connection_success(): func _on_connection_success():
print('greean')
status.text = "Connected" status.text = "Connected"
status.modulate = Color.green status.modulate = Color.green
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
[ext_resource path="res://kerno/menuo/resursoj/icons/icon7.png" type="Texture" id=25] [ext_resource path="res://kerno/menuo/resursoj/icons/icon7.png" type="Texture" id=25]
[ext_resource path="res://kerno/menuo/resursoj/icons/icon6.png" type="Texture" id=26] [ext_resource path="res://kerno/menuo/resursoj/icons/icon6.png" type="Texture" id=26]
[ext_resource path="res://kerno/menuo/resursoj/icons/icon5.png" type="Texture" id=27] [ext_resource path="res://kerno/menuo/resursoj/icons/icon5.png" type="Texture" id=27]
[ext_resource path="res://kerno/menuo/resursoj/icons/tab5b.png" type="Texture" id=28] [ext_resource path="res://kerno/menuo/resursoj/icons/tab5.png" type="Texture" id=28]
[ext_resource path="res://kerno/menuo/resursoj/icons/lefticon7.png" type="Texture" id=29] [ext_resource path="res://kerno/menuo/resursoj/icons/lefticon7.png" type="Texture" id=29]
[ext_resource path="res://kerno/menuo/resursoj/icons/lefticon4.png" type="Texture" id=30] [ext_resource path="res://kerno/menuo/resursoj/icons/lefticon4.png" type="Texture" id=30]
[ext_resource path="res://kerno/menuo/resursoj/icons/lefticon3.png" type="Texture" id=31] [ext_resource path="res://kerno/menuo/resursoj/icons/lefticon3.png" type="Texture" id=31]
...@@ -402,16 +402,6 @@ __meta__ = { ...@@ -402,16 +402,6 @@ __meta__ = {
"_edit_use_anchors_": true "_edit_use_anchors_": true
} }
[node name="Label" type="Label" parent="CanvasLayer/UI/user"]
margin_left = 37.0
margin_top = 15.0
margin_right = 142.0
margin_bottom = 32.0
text = "Моя планета"
__meta__ = {
"_edit_use_anchors_": true
}
[node name="news" type="Button" parent="CanvasLayer/UI"] [node name="news" type="Button" parent="CanvasLayer/UI"]
margin_left = 702.61 margin_left = 702.61
margin_top = -3.46329 margin_top = -3.46329
......
extends Node extends Node
# Game port and ip # WebSocket - клиент
const ip = "159.69.44.27" class_name GraphQLWSConnector
#const ip = "127.0.0.1"
const DEFAULT_PORT = 44444
# Signal to let GUI know whats up # Signal to let GUI know whats up
signal connection_failed() signal connection_failed()
signal connection_succeeded() signal connection_succeeded()
signal server_disconnected() signal server_disconnected()
signal players_updated()
signal message_received()
# Имя этого игрока. Пока берём из Global.login (см. _ready())
var my_name = ""
# ID этого игрока. Устанавливается функцией register_player()
# TODO: удалить, если не будем использовать
var my_id
# Хэш со всеми игроками зарегистрированными на сервере {id: name} # запросы отправляются с очередным id
# заполняется функцией register_player() var current_query_id = 1
var players = {}
export var websocket_url = "wss://t34.tehnokom.su/api/v1.1/ws/"
var _client = WebSocketClient.new()
var connected = false
func _ready():
my_name = Global.login
get_tree().connect("connected_to_server", self, "_connected_ok")
get_tree().connect("connection_failed", self, "_connected_fail")
get_tree().connect("server_disconnected", self, "_server_disconnected")
func connect_to_server(): # Хэш со всеми игроками зарегистрированными на сервере {id: name}
var host = NetworkedMultiplayerENet.new() # заполняется функцией register_player()
host.create_client(ip, DEFAULT_PORT) var players = {}
get_tree().set_network_peer(host)
# Callback from SceneTree, called when connect to server
func _connected_ok():
emit_signal("connection_succeeded")
# Register ourselves with the server
rpc_id(NetworkedMultiplayerPeer.TARGET_PEER_SERVER, "register_player", my_name)
func _ready():
_client.connect("connection_closed", self, "_closed")
_client.connect("connection_error", self, "_error")
_client.connect("connection_established", self, "_connected")
_client.connect("data_received", self, "_on_data")
# Callback from SceneTree, called when server disconnect
func _server_disconnected():
players.clear()
emit_signal("server_disconnected")
# Try to connect again func _closed(was_clean = false):
connect_to_server() # was_clean will tell you if the disconnection was correctly notified
# by the remote peer before closing the socket.
print("Closed, clean: ", was_clean)
# set_process(false)
emit_signal("server_disconnected")
# Callback from SceneTree, called when unabled to connect to server func _error(was_clean = false):
func _connected_fail(): print("Closed, error: ", was_clean)
get_tree().set_network_peer(null) # Remove peer
emit_signal("connection_failed") emit_signal("connection_failed")
# Try to connect again
connect_to_server()
# Вызывается сервером, когда подключается новый игрок
# id - ID подключенного игрока
# new_player_data - Имя (логин) игрока
puppet func register_player(id, new_player_data):
if new_player_data == my_name:
my_id = id
players[id] = new_player_data
emit_signal("players_updated")
# Вызывается сервером, когда какой-либо игрок отключается func _connected(proto = ""):
# id - ID отключающегося игрока print("Connected with protocol: ", proto)
puppet func unregister_player(id): # Вот тут отправляем инициирущий пакет
players.erase(id) _client.get_peer(1).put_packet(JSON.print({
emit_signal("players_updated") 'type': 'connection_init',
'payload': {}
}).to_utf8())
# получение данных с сервера
func _on_data():
# Print the received packet, you MUST always use get_peer(1).get_packet
# to receive data from server, and not get_packet directly when not
# using the MultiplayerAPI.
var jdata = _client.get_peer(1).get_packet().get_string_from_utf8()
var data = JSON.parse(jdata).result
if data.has('type') && data['type'] == 'connection_ack':
connected = true
emit_signal("connection_succeeded")
print('===emit_signal("connection_succeeded")')
if data.has('type') && data['type'] == 'data':
print('===data= ',data)
print("Got data from server: ", jdata)
func _process(_delta):
# Что бы получать данные с сервера
_client.poll()
func _exit_tree():
_client.disconnect_from_host()
# отправка данных на сервер
func send_data(data, id=0):# если id==0 берём очередное и его увеличиваем сами
print('=== host2=',_client.get_connected_host())
print('=== port2=',_client.get_connected_port())
if not id:
id = current_query_id
current_query_id += 1
_client.get_peer(1).put_packet(JSON.print({
'type': 'start',
'id': '%s' % id,
'payload': { 'query': data}
}).to_utf8())
return id
func connect_to_server():
# Вызывается сервером для доставки текстового сообщения пользователю print('===input WS')
puppet func messaging(message): var protocols2 = PoolStringArray(["graphql-ws"])
emit_signal("message_received", message) var err = _client.connect_to_url(websocket_url, protocols2, false, Global.backend_headers)
if err != OK:
print("Unable to connect = ", err)
# Returns list of player names else:
func get_player_list(): _client.get_peer(1).set_write_mode(WebSocketPeer.WRITE_MODE_TEXT)
return players.values() print('===OK=')
return err
func send_command(command):
rpc_id(NetworkedMultiplayerPeer.TARGET_PEER_SERVER, "exec_command", command)
extends Node
# Game port and ip
const ip = "159.69.44.27"
#const ip = "127.0.0.1"
const DEFAULT_PORT = 44444
# Signal to let GUI know whats up
signal connection_failed()
signal connection_succeeded()
signal server_disconnected()
signal players_updated()
signal message_received()
# Имя этого игрока. Пока берём из Global.login (см. _ready())
var my_name = ""
# ID этого игрока. Устанавливается функцией register_player()
# TODO: удалить, если не будем использовать
var my_id
# Хэш со всеми игроками зарегистрированными на сервере {id: name}
# заполняется функцией register_player()
var players = {}
func _ready():
my_name = Global.login
get_tree().connect("connected_to_server", self, "_connected_ok")
get_tree().connect("connection_failed", self, "_connected_fail")
get_tree().connect("server_disconnected", self, "_server_disconnected")
func connect_to_server():
var host = NetworkedMultiplayerENet.new()
host.create_client(ip, DEFAULT_PORT)
get_tree().set_network_peer(host)
# Callback from SceneTree, called when connect to server
func _connected_ok():
emit_signal("connection_succeeded")
# Register ourselves with the server
rpc_id(NetworkedMultiplayerPeer.TARGET_PEER_SERVER, "register_player", my_name)
# Callback from SceneTree, called when server disconnect
func _server_disconnected():
players.clear()
emit_signal("server_disconnected")
# Try to connect again
connect_to_server()
# Callback from SceneTree, called when unabled to connect to server
func _connected_fail():
get_tree().set_network_peer(null) # Remove peer
emit_signal("connection_failed")
# Try to connect again
connect_to_server()
# Вызывается сервером, когда подключается новый игрок
# id - ID подключенного игрока
# new_player_data - Имя (логин) игрока
puppet func register_player(id, new_player_data):
if new_player_data == my_name:
my_id = id
players[id] = new_player_data
emit_signal("players_updated")
# Вызывается сервером, когда какой-либо игрок отключается
# id - ID отключающегося игрока
puppet func unregister_player(id):
players.erase(id)
emit_signal("players_updated")
# Вызывается сервером для доставки текстового сообщения пользователю
puppet func messaging(message):
emit_signal("message_received", message)
# Returns list of player names
func get_player_list():
return players.values()
func send_command(command):
rpc_id(NetworkedMultiplayerPeer.TARGET_PEER_SERVER, "exec_command", command)
...@@ -8,9 +8,14 @@ ...@@ -8,9 +8,14 @@
config_version=4 config_version=4
_global_script_classes=[ ] _global_script_classes=[ {
"base": "Node",
"class": "GraphQLWSConnector",
"language": "GDScript",
"path": "res://kerno/skriptoj/network.gd"
} ]
_global_script_class_icons={ _global_script_class_icons={
"GraphQLWSConnector": ""
} }
[WAT] [WAT]
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать