| … | … | @@ -25,7 +25,7 @@ func _ready(): |
| 25 | 25 | hyperGateway = get_tree().get_current_scene().get_node("HyperGodot").get_node("HyperGateway") |
| 26 | 26 | hyperGossip = get_tree().get_current_scene().get_node("HyperGodot").get_node("HyperGossip") |
| 27 | 27 | hyperDebugUI = get_tree().get_current_scene().get_node("HyperGodot").get_node("HyperDebugUI") |
| 28 | localSnapshotTimer = get_tree().get_current_scene().get_node("HyperGodot").get_node("LocalSnapshotTimer") | |
| 28 | # localSnapshotTimer = get_tree().get_current_scene().get_node("HyperGodot").get_node("LocalSnapshotTimer") | |
| 29 | 29 | |
| 30 | 30 | func _process(_delta): |
| 31 | 31 | pass |
| … | … | @@ -1,6 +1,5 @@ |
| 1 | extends "res://src/ResizeRoot.gd" | |
| 2 | ||
| 3 | const LRU = preload('res://src/utils/LRU.gd') | |
| 1 | extends Control | |
| 2 | # extends "res://src/ResizeRoot.gd" | |
| 4 | 3 | |
| 5 | 4 | # Messages are JSON which contain {id, from, username, type, content} |
| 6 | 5 | # All messages have a username and type |
| … | … | @@ -15,9 +14,13 @@ const LRU = preload('res://src/utils/LRU.gd') |
| 15 | 14 | # Broadcast self on name change |
| 16 | 15 | # Broadcast self when seeing a new remotePublicKey |
| 17 | 16 | |
| 18 | export var archiveRoot = 'hyper://blog.mauve.moe/' | |
| 17 | @export var archiveRoot = 'hyper://blog.mauve.moe/' | |
| 19 | 18 | #export var archiveRoot = 'hyper://70338a94d7415990ab4a3160cf98a5d940243d7fa24dd297352e66b52d3ff841/' |
| 20 | export var extensionName = 'hyperchat-example-1' | |
| 19 | @export var extensionName = 'hyperchat-example-1' | |
| 20 | ||
| 21 | const LRU = preload('res://hypergodot/utils/lru.gd') | |
| 22 | ||
| 23 | @onready var jsonInstance = JSON.new() | |
| 21 | 24 | |
| 22 | 25 | var extensionsFolder = archiveRoot + '$/extensions/' |
| 23 | 26 | var extensionPath = extensionsFolder + extensionName |
| … | … | @@ -25,13 +28,13 @@ var extensionPath = extensionsFolder + extensionName |
| 25 | 28 | var seen_messages = LRU.new() |
| 26 | 29 | var seen_identities = LRU.new() |
| 27 | 30 | |
| 28 | onready var eventSource = $HyperGateway/HyperEventSource | |
| 29 | onready var gateway = $HyperGateway | |
| 30 | onready var chatBox = $ScrollContainer/ChatBox | |
| 31 | onready var chatText = $HBoxContainer/ChatInput | |
| 32 | onready var username = $HBoxContainer/Username | |
| 33 | onready var broadcastRequest = $HyperGateway/BroadcastRequest | |
| 34 | onready var listPeersRequest = $HyperGateway/ListPeersRequest | |
| 31 | @onready var eventSource = $HyperGateway/HyperEventSource | |
| 32 | @onready var gateway = $HyperGateway | |
| 33 | @onready var chatBox = $ScrollContainer/ChatBox | |
| 34 | @onready var chatText = $HBoxContainer/ChatInput | |
| 35 | @onready var username = $HBoxContainer/Username | |
| 36 | @onready var broadcastRequest = $HyperGateway/BroadcastRequest | |
| 37 | @onready var listPeersRequest = $HyperGateway/ListPeersRequest | |
| 35 | 38 | |
| 36 | 39 | func _ready(): |
| 37 | 40 | # Initialize random number generator |
| … | … | @@ -98,7 +101,7 @@ func broadcast_message(message): |
| 98 | 101 | message.id = make_id() |
| 99 | 102 | seen_messages.track(message.id) |
| 100 | 103 | print('Broadcasting message', message, extensionPath) |
| 101 | var body = JSON.print(message) | |
| 104 | var body = jsonInstance.stringify(message) | |
| 102 | 105 | broadcastRequest.request(extensionPath,[], false, HTTPClient.METHOD_POST, body) |
| 103 | 106 | |
| 104 | 107 | func has_seen_identity(from): |
| … | … | @@ -129,13 +132,13 @@ func handle_message(message, from): |
| 129 | 132 | _on_unknown_message(message, finalFrom) |
| 130 | 133 | |
| 131 | 134 | func _on_event(data, _event, id): |
| 132 | var parsed = JSON.parse(data) | |
| 133 | ||
| 134 | if parsed.error != OK: | |
| 135 | printerr("Unable to parse EventSource content " + parsed.error_line + "\n" + data) | |
| 136 | return | |
| 137 | ||
| 138 | handle_message(parsed.result, id) | |
| 135 | var error = jsonInstance.parse(data) | |
| 136 | var parsed = null | |
| 137 | if error != OK: | |
| 138 | printerr("Unable to parse EventSource content " + jsonInstance.get_error_line() + "\n" + data) | |
| 139 | else: | |
| 140 | parsed = jsonInstance.get_data() | |
| 141 | handle_message(parsed.result, id) | |
| 139 | 142 | |
| 140 | 143 | func make_id(): |
| 141 | 144 | return str(randi()) + str(randi()) |
| … | … | @@ -143,18 +146,17 @@ func make_id(): |
| 143 | 146 | func start_listening(): |
| 144 | 147 | eventSource.request(extensionsFolder) |
| 145 | 148 | |
| 146 | func _on_HyperEventSource_event(data, event, id): | |
| 147 | _on_event(data, event, id) | |
| 148 | ||
| 149 | 149 | func _on_HyperGateway_started_gateway(_pid): |
| 150 | 150 | start_listening() |
| 151 | 151 | list_peers() |
| 152 | 152 | broadcast_identity() |
| 153 | 153 | |
| 154 | func _on_SendButton_pressed(): | |
| 154 | func _on_ChatInput_text_entered(_new_text): | |
| 155 | 155 | send_current() |
| 156 | 156 | pass # Replace with function body. |
| 157 | 157 | |
| 158 | func _on_ChatInput_text_entered(_new_text): | |
| 158 | func _on_send_button_pressed(): | |
| 159 | 159 | send_current() |
| 160 | pass # Replace with function body. | |
| 160 | ||
| 161 | func _on_hyper_event_source_event(data, event, id): | |
| 162 | _on_event(data, event, id) |
| … | … | @@ -1,4 +1,4 @@ |
| 1 | [gd_scene load_steps=5 format=3] | |
| 1 | [gd_scene load_steps=5 format=3 uid="uid://c07q1el2aovpr"] | |
| 2 | 2 | |
| 3 | 3 | [ext_resource type="Script" path="res://menu/chat/HyperChat/HyperChat.gd" id="1"] |
| 4 | 4 | [ext_resource type="PackedScene" uid="uid://cue2rke35i36o" path="res://hypergodot/hyper_gateway/hyper_gateway.tscn" id="2"] |
| … | … | @@ -8,61 +8,54 @@ |
| 8 | 8 | [node name="Control" type="VBoxContainer"] |
| 9 | 9 | anchor_right = 1.0 |
| 10 | 10 | anchor_bottom = 1.0 |
| 11 | script = ExtResource( 1 ) | |
| 12 | __meta__ = { | |
| 13 | "_edit_use_anchors_": false | |
| 14 | } | |
| 11 | script = ExtResource( "1" ) | |
| 15 | 12 | |
| 16 | 13 | [node name="HBoxContainer" type="HBoxContainer" parent="."] |
| 17 | margin_right = 666.0 | |
| 18 | margin_bottom = 24.0 | |
| 14 | offset_right = 1440.0 | |
| 15 | offset_bottom = 23.0 | |
| 19 | 16 | |
| 20 | 17 | [node name="ChatInput" type="LineEdit" parent="HBoxContainer"] |
| 21 | margin_right = 487.0 | |
| 22 | margin_bottom = 24.0 | |
| 18 | offset_right = 1349.0 | |
| 19 | offset_bottom = 23.0 | |
| 23 | 20 | size_flags_horizontal = 3 |
| 24 | 21 | |
| 25 | 22 | [node name="SendButton" type="Button" parent="HBoxContainer"] |
| 26 | margin_left = 491.0 | |
| 27 | margin_right = 534.0 | |
| 28 | margin_bottom = 24.0 | |
| 23 | offset_left = 1352.0 | |
| 24 | offset_right = 1387.0 | |
| 25 | offset_bottom = 23.0 | |
| 29 | 26 | text = "Send" |
| 30 | 27 | |
| 31 | 28 | [node name="Username" type="LineEdit" parent="HBoxContainer"] |
| 32 | margin_left = 538.0 | |
| 33 | margin_right = 666.0 | |
| 34 | margin_bottom = 24.0 | |
| 35 | rect_min_size = Vector2( 128, 0 ) | |
| 29 | offset_left = 1390.0 | |
| 30 | offset_right = 1440.0 | |
| 31 | offset_bottom = 23.0 | |
| 36 | 32 | text = "Anonymous" |
| 37 | 33 | |
| 38 | 34 | [node name="ScrollContainer" type="ScrollContainer" parent="."] |
| 39 | margin_top = 28.0 | |
| 40 | margin_right = 666.0 | |
| 41 | margin_bottom = 666.0 | |
| 35 | offset_top = 26.0 | |
| 36 | offset_right = 1440.0 | |
| 37 | offset_bottom = 810.0 | |
| 42 | 38 | size_flags_horizontal = 3 |
| 43 | 39 | size_flags_vertical = 3 |
| 44 | 40 | |
| 45 | 41 | [node name="ChatBox" type="RichTextLabel" parent="ScrollContainer"] |
| 46 | margin_right = 666.0 | |
| 47 | margin_bottom = 638.0 | |
| 42 | offset_right = 1440.0 | |
| 43 | offset_bottom = 784.0 | |
| 48 | 44 | size_flags_horizontal = 3 |
| 49 | 45 | size_flags_vertical = 3 |
| 50 | 46 | text = "System: Enter some text and hit `send` to broadcast it to peers. |
| 51 | 47 | " |
| 52 | 48 | |
| 53 | [node name="HyperGateway" parent="." instance=ExtResource( 2 )] | |
| 54 | autoStart = false | |
| 49 | [node name="HyperGateway" parent="." instance=ExtResource( "2" )] | |
| 55 | 50 | |
| 56 | 51 | [node name="HyperEventSource" type="Node" parent="HyperGateway"] |
| 57 | script = ExtResource( 3 ) | |
| 52 | script = ExtResource( "3" ) | |
| 58 | 53 | |
| 59 | 54 | [node name="BroadcastRequest" type="HTTPRequest" parent="HyperGateway"] |
| 60 | script = ExtResource( 4 ) | |
| 55 | script = ExtResource( "4" ) | |
| 61 | 56 | |
| 62 | 57 | [node name="ListPeersRequest" type="HTTPRequest" parent="HyperGateway"] |
| 63 | script = ExtResource( 4 ) | |
| 58 | script = ExtResource( "4" ) | |
| 64 | 59 | |
| 65 | [connection signal="text_entered" from="HBoxContainer/ChatInput" to="." method="_on_ChatInput_text_entered"] | |
| 66 | 60 | [connection signal="pressed" from="HBoxContainer/SendButton" to="." method="_on_SendButton_pressed"] |
| 67 | 61 | [connection signal="started_gateway" from="HyperGateway" to="." method="_on_HyperGateway_started_gateway"] |
| 68 | [connection signal="event" from="HyperGateway/HyperEventSource" to="." method="_on_HyperEventSource_event"] |
| … | … | @@ -19,13 +19,14 @@ signal quit # Useless, but needed as there is no clean way to check if a node ex |
| 19 | 19 | @onready var settings_action_cancel = settings_actions.get_node("Cancel") |
| 20 | 20 | |
| 21 | 21 | @onready var multiplayer_menu = uiProper.get_node("Multiplayer") |
| 22 | @onready var multiplayer_LabelGWStatus = multiplayer_menu.get_node("HyperGatewayStatus").get_node("LabelGWStatus") | |
| 23 | @onready var multiplayer_StartGW = multiplayer_menu.get_node("Gateway").get_node("Start") | |
| 24 | @onready var multiplayer_StopGW = multiplayer_menu.get_node("Gateway").get_node("Stop") | |
| 25 | @onready var multiplayer_LabelGossipStatus = multiplayer_menu.get_node("HyperGossipStatus").get_node("LabelGossipStatus") | |
| 26 | @onready var multiplayer_PortInput = multiplayer_menu.get_node("HyperGatewayPort").get_node("LineEdit") | |
| 27 | @onready var multiplayer_GossipURLInput = multiplayer_menu.get_node("GossipURL").get_node("LineEdit") | |
| 28 | @onready var multiplayer_actions_ok = multiplayer_menu.get_node("Actions").get_node("OK") | |
| 22 | @onready var multiplayer_menu_proper = multiplayer_menu.get_node("VBoxContainer") | |
| 23 | @onready var multiplayer_LabelGWStatus = multiplayer_menu_proper.get_node("HyperGatewayStatus").get_node("LabelGWStatus") | |
| 24 | @onready var multiplayer_StartGW = multiplayer_menu_proper.get_node("Gateway").get_node("Start") | |
| 25 | @onready var multiplayer_StopGW = multiplayer_menu_proper.get_node("Gateway").get_node("Stop") | |
| 26 | @onready var multiplayer_LabelGossipStatus = multiplayer_menu_proper.get_node("HyperGossipStatus").get_node("LabelGossipStatus") | |
| 27 | @onready var multiplayer_PortInput = multiplayer_menu_proper.get_node("HyperGatewayPort").get_node("LineEdit") | |
| 28 | @onready var multiplayer_GossipURLInput = multiplayer_menu_proper.get_node("GossipURL").get_node("LineEdit") | |
| 29 | @onready var multiplayer_actions_ok = multiplayer_menu_proper.get_node("Actions").get_node("OK") | |
| 29 | 30 | |
| 30 | 31 | @onready var shadows_menu = settings_menu.get_node("Shadows") |
| 31 | 32 | @onready var shadows_4096 = shadows_menu.get_node("4096") |