From 563d222456531ac75a01b9b7d1e20d7b2edc281c Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Mon, 13 Jan 2025 18:56:12 -0700 Subject: [PATCH] Error handling on peer creation --- src/title_screen/title_screen.gd | 26 ++++++-- src/title_screen/title_screen.tscn | 100 +++++++++++++++++++++++++++++ ui.theme | Bin 657 -> 707 bytes 3 files changed, 122 insertions(+), 4 deletions(-) diff --git a/src/title_screen/title_screen.gd b/src/title_screen/title_screen.gd index 142613c..9515c39 100644 --- a/src/title_screen/title_screen.gd +++ b/src/title_screen/title_screen.gd @@ -38,6 +38,9 @@ const RANDOM_NAMES = [ @onready var hostname_input: LineEdit = %HostnameInput @onready var join_port_input: SpinBox = %JoinPortInput +@onready var err_already_in_use: ColorRect = %ErrAlreadyInUse +@onready var err_cant_create: ColorRect = %ErrCantCreate + func _ready() -> void: name_input.text = RANDOM_NAMES.pick_random() @@ -73,19 +76,34 @@ func _build_game() -> Game: return game +func _peer_ok(err: Error) -> bool: + match err: + ERR_ALREADY_IN_USE: + err_already_in_use.show() + return false + ERR_CANT_CREATE: + err_cant_create.show() + return false + return true + + func start_host_lobby() -> void: - var game: Game = _build_game() var peer := ENetMultiplayerPeer.new() - peer.create_server(host_port_input.value, MAX_CLIENTS) + if not _peer_ok(peer.create_server(int(host_port_input.value), MAX_CLIENTS)): + return + + var game: Game = _build_game() add_sibling(game) game.multiplayer.multiplayer_peer = peer queue_free() func join_lobby() -> void: - var game: Game = _build_game() var peer := ENetMultiplayerPeer.new() - peer.create_client(hostname_input.text, join_port_input.value) + if not _peer_ok(peer.create_client(hostname_input.text, int(join_port_input.value))): + return + + var game: Game = _build_game() add_sibling(game) game.multiplayer.multiplayer_peer = peer queue_free() diff --git a/src/title_screen/title_screen.tscn b/src/title_screen/title_screen.tscn index c62a9ff..98622be 100644 --- a/src/title_screen/title_screen.tscn +++ b/src/title_screen/title_screen.tscn @@ -165,6 +165,104 @@ layout_mode = 2 text = "Cancel " +[node name="ErrAlreadyInUse" type="ColorRect" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.156863) + +[node name="PanelContainer" type="PanelContainer" parent="ErrAlreadyInUse"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="ErrAlreadyInUse/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 16 + +[node name="VBoxContainer" type="VBoxContainer" parent="ErrAlreadyInUse/PanelContainer/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="Label" type="Label" parent="ErrAlreadyInUse/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0.3, 0.3, 1) +theme_override_constants/outline_size = 4 +theme_override_font_sizes/font_size = 24 +text = "ERROR: Connection already in use." +horizontal_alignment = 1 + +[node name="Button" type="Button" parent="ErrAlreadyInUse/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +text = "OK" + +[node name="ErrCantCreate" type="ColorRect" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0.156863) + +[node name="PanelContainer" type="PanelContainer" parent="ErrCantCreate"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="ErrCantCreate/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 16 + +[node name="VBoxContainer" type="VBoxContainer" parent="ErrCantCreate/PanelContainer/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="Label" type="Label" parent="ErrCantCreate/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0.3, 0.3, 1) +theme_override_constants/outline_size = 4 +theme_override_font_sizes/font_size = 24 +text = "ERROR: Can't create connection." +horizontal_alignment = 1 + +[node name="Button" type="Button" parent="ErrCantCreate/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +text = "OK" + [connection signal="pressed" from="Menu/MainMenu/Host" to="." method="show_host_menu"] [connection signal="pressed" from="Menu/MainMenu/Join" to="." method="show_join_menu"] [connection signal="pressed" from="Menu/MainMenu/Quit" to="." method="quit"] @@ -172,3 +270,5 @@ text = "Cancel [connection signal="pressed" from="Menu/HostMenu/Cancel" to="." method="show_main_menu"] [connection signal="pressed" from="Menu/JoinMenu/Connect" to="." method="join_lobby"] [connection signal="pressed" from="Menu/JoinMenu/Cancel" to="." method="show_main_menu"] +[connection signal="pressed" from="ErrAlreadyInUse/PanelContainer/MarginContainer/VBoxContainer/Button" to="ErrAlreadyInUse" method="hide"] +[connection signal="pressed" from="ErrCantCreate/PanelContainer/MarginContainer/VBoxContainer/Button" to="ErrCantCreate" method="hide"] diff --git a/ui.theme b/ui.theme index 893a36170a4f997fd5cbe9561522e5f0814e55af..13b27d2e666c14fe4932a455bee9abc9f38d2dfe 100644 GIT binary patch literal 707 zcmV;!0zCavQ$s@n000005C8z!1^@u70ssIgwJ-f(*aZz005+XrKQM2T4#0>eLv$r& zhAst#)Vvvi=?+^HMBbBZ$vWE-A~zwcA)@c|bn9)15JU$?%ER)bIgGZo8G#J$Z+6R4 zN&rm&O8_uZ&6@rX_!Yb3q~Hy*p41$Rjd@oK8$V0x)ta|CQvWmGOF84qOU)L$L8T&W zOUW$GmH#*XSNKTL0vpjm1B>sqAPyM+FaB5lTCKyLqykv{raq|cHS5l*iY9M{qEpb+ zWG;>sD_Quo*JU(turageR5rOR7u@l}=|Bdf0c!U`O|Fyi^3Zyi|1Fo>yi^ORbpH)p z#@2o;ERQUYwCReRCX#YN9clK?sgmRY@`caS96djP%jKudu>+TN!~X||ddbMrTqx?P zaXaTqtVvVi*qw3yOW;^7RBE=JI<Y^eQFX`55STb7x}X-0TN!wYKHS2v5Vlt6DTy2sN%HtB zAu2Wk2#~}Ruev*=!YqJ-sFAf%NJvJspdhKF17Lz7Xv*dR5m3{xAf%HShULK@vG0QMIl;8^2E`VypXw3w3c z>Dc`kSZ^-OhpY_LcAmV1X!XaIjSXlII%$&YRVkVZ3{D)~*J93i zg%GGc-Y;}>CHJTjiKbgJ@f53r*EJ*)C{Mf~!knQZOc&~t?NpQ#2qYaSBOgIY>qAZG zy!J3iGSFBKe{XKhrB~t)+|uTh(JWd_@VT?_ip1K97wOIN0by))Nx$dh9Q4lLI`~$# p!s$>SB$QSqRLLo@V&7e@kGuHu4`+(Qy}m^kDrlW+z#URkLqi4`NN4~6 literal 657 zcmV;C0&e|MQ$s@n000005C8z+1pokf0ssIgwJ-f(-~@dW04Cd8K0s}g4#Pvn#Gx_b z%sj&et9HyaJ$j==+KR|c4L2b~ZnDom&qXe?zLnu7CR4y({PJ_b)7{04&dwU^M>YjT z07w8v03YycyH`^1wkkL;$F?hPN@J6-n(k^XwdGF#E!WG*i>uU$+jfg?+SqiO*|N_6 z8UHC@N~FL*XuyEtda0EGz<-PXl0UA&mQI42qzVfBNbHucS={G%KA|Kw9!>eN1NzW)Y3H}2Fb=@0Tl3dW;(vip zImSqKsSS!9yJ_ql^AN1 zuY_64FAy=TiHPb@N{C$chjv4NN;=j{zEDBd zGnwYZ?ZH5A*4V>8*Dm3*E29Tp=?cnN7wt rn5(%0I-Cc+5>^QmbwX8sn>zZq);})@M(f@49dt24GiP#{Qd2`i(9|)F