LargeScreen/main.gd
2025-01-13 14:39:58 +08:00

183 lines
5.0 KiB
GDScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Control
var StateTab = null
var isEnd = false
var url = ""
signal finished
func _ready() -> void:
StateTab = find_child("StateTab")
Websocket.connected_to_server.connect(connected_to_server)
Websocket.message_received.connect(message_received)
#while !isEnd:
#print($HTTPRequest.read_response_body_chunk().s,"/",$HTTPRequest.get_body_size())
#await get_tree().create_timer(0.1).timeout
#
while true:
for urlItem in Global.urlArr:
url = urlItem
get_Advertise()
await finished
await get_tree().physics_frame
func connected_to_server():
CurrentStationInfo_Report()
all_station_info()
pass
var stations
var arrName = []
var current_stationName = ""
func message_received(data:Dictionary):
if data.is_empty():return
if !data.has("topic"):return
match data.topic:
#站点信息反馈
"/hmi_input/app/display/current_station_info":
#print(data.msg.current_station)#当前站点
#print(data.msg.target_station)#下一站点
if (!arrName.is_empty()) and current_stationName != data.msg.current_station.name:
current_stationName = data.msg.current_station.name
for index in arrName.size():
if arrName[index] == data.msg.current_station.name:
print(data.msg.target_station.name,"===",data.msg.current_station.name,"===",arrName[index-1],"===",arrName[index-2])
%StationView.set_station(data.msg.target_station.name,data.msg.current_station.name,arrName[index-1],arrName[index-2])
pass
pass
#获取所有站点信息
"/app/display/all_station_info":
stations = data.msg.stations
for item in stations:
arrName.append(item.name)
pass
#所有站点反馈
func all_station_info():
var send_data = {
"op": "subscribe",
"topic": "/app/display/all_station_info",
"type": "pixmoving_hmi_msgs/msg/V2dAllStationInfo"
}
Websocket.send_msg(str(send_data))
#任务站点信息反馈
func CurrentStationInfo_Report():
var send_data = {
"op": "subscribe",
"topic": "/hmi_input/app/display/current_station_info",
"type": "pixmoving_hmi_msgs/msg/V2dCurrentStationInfo"
}
Websocket.send_msg(str(send_data))
func _on_more_option_pressed() -> void:
%MoreOptionPanel.visibility_layer=not %MoreOptionPanel.visibility_layer
pass # Replace with function body.
func _on_ad_view_self_click(is_selected: bool) -> void:
%ADPanel.visible=not is_selected
if !%ADPanel.visible:
%AdpanelVideoStreamPlayer.stream = null
else:
get_Advertise()
if not is_selected:
%ADTab.hide()
StateTab.hide()
pass # Replace with function body.
func _on_tunnel_panel_request_hide() -> void:
%ADTab.hide()
StateTab.hide()
pass # Replace with function body.
func _on_tunnel_panel_search_click(str: String) -> void:
%AdpanelVideoStreamPlayer.stop()
finished.emit()
pass # Replace with function body.
func _on_language_pressed() -> void:
if %ADView.is_select:
StateTab.set_current_tab(0)
StateTab.show()
else:
%ADTab.set_current_tab(0)
%ADTab.show()
pass # Replace with function body.
func _on_tunnel_pressed() -> void:
if %ADView.is_select:
StateTab.set_current_tab(1)
StateTab.show()
else:
%ADTab.set_current_tab(1)
%ADTab.show()
pass # Replace with function body.
func _on_language_panel_horizontal_click(index: int) -> void:
%LanguageVertical.set_select(index)
pass # Replace with function body.
func _on_language_vertical_click(index: int) -> void:
%LanguagePanelHorizontal.set_select(index)
pass # Replace with function body.
func _on_language_close_requeset() -> void:
%ADTab.hide()
StateTab.hide()
pass # Replace with function body.
var download_start_time: int = 0
func get_Advertise():
var file_path = "user://"+url.get_file()
if FileAccess.file_exists(file_path):
%AdpanelVideoStreamPlayer.stream = load(file_path)
%AdpanelVideoStreamPlayer.play()
pass
else:
# 假设要下载的视频地址
print("开始下载广告视频" + url)
# 向服务器发起下载请求
$HTTPRequest.request(url)
pass
func _on_http_request_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void:
if result != OK or response_code != 200:
push_error("下载失败Result: %d, Response Code: %d" % [result, response_code])
return
# 计算下载总耗时(毫秒)
var total_time_ms = Time.get_ticks_msec() - download_start_time
var total_time_s = float(total_time_ms) / 1000.0
var total_size_bytes = body.size()
var speed_bps = total_size_bytes / total_time_s # 字节/秒
var speed_kbps = speed_bps / 1024.0
print("平均速度: %.2f KB/s" % speed_kbps)
# 写文件 + 播放
var file_path = "user://" + url.get_file()
var file = FileAccess.open(file_path, FileAccess.WRITE)
if file:
file.store_buffer(body)
file.close()
%AdpanelVideoStreamPlayer.stream = load(file_path)
%AdpanelVideoStreamPlayer.play()
else:
push_error("文件写入失败!")
pass # Replace with function body.
func _process(delta: float) -> void:
%AdpanelTextureRect.texture = %AdpanelVideoStreamPlayer.get_video_texture()
func _on_adpanel_video_stream_player_finished() -> void:
finished.emit()
pass # Replace with function body.