Godot的WebSocket
用于做H5数据转发传输, 这里采用 Godot 内部脚本生成工具类 ( websocket_manager.gd ) :
extends Node
# 会话句柄
var socket:WebSocketPeer = WebSocketPeer.new()
# 确认是否初始化开放过
var _opened:bool = false
# 监听信号事件
signal on_connect
signal on_open
signal on_closing
signal on_closed
signal on_message
# 初始化事件
func _ready():
stop()
set_physics_process(false)
# 启动执行
func start():
_opened = false
set_process(true)
# 停止执行
func stop():
_opened = false
set_process(false)
# 链接WebSocket服务
func connect_to_url(url:String,tls_client_options: TLSOptions = null)->Error:
# 这里默认采用非安全,正式环境最后配置好安全证书
if tls_client_options == null:
tls_client_options = TLSOptions.client_unsafe()
var state:Error = socket.connect_to_url(url,tls_client_options)
if state == OK:
start()
return state
# 确认是否连接
func is_open()->bool:
var state:WebSocketPeer.State = socket.get_ready_state()
return state == WebSocketPeer.STATE_OPEN or state == WebSocketPeer.STATE_CONNECTING
# 监听运行时
func _process(_delta):
socket.poll()
var state = socket.get_ready_state()
# 状态分发
if state == WebSocketPeer.STATE_CONNECTING:
on_connect.emit(socket)
elif state == WebSocketPeer.STATE_OPEN:
if not _opened:
_opened = true
on_open.emit(socket)
while socket.get_available_packet_count():
on_message.emit(socket,socket.get_packet())
elif state == WebSocketPeer.STATE_CLOSING:
on_closing.emit(socket)
elif state == WebSocketPeer.STATE_CLOSED:
var code:int = socket.get_close_code()
var reason:String = socket.get_close_reason()
on_closed.emit(socket,code,reason)
stop()
# 推送JSON数据
func send_json(data: Variant, indent: String = "", sort_keys: bool = true, full_precision: bool = false)->Error:
return socket.send_text(JSON.stringify(data,indent,sort_keys,full_precision))
对于这个访问工具类可以采用全局挂载或者生成全局节点对象挂载, 后续可以直接出扩展出来处理.