219 lines
7.7 KiB
GDScript
219 lines
7.7 KiB
GDScript
extends Control
|
|
|
|
|
|
const SERVER_PORT = 10042
|
|
|
|
const FILE_ID_SETTINGS = 0
|
|
const FILE_ID_EXIT = 2
|
|
|
|
const HELP_ID_ABOUT = 0
|
|
const HELP_ID_MANUAL = 1
|
|
|
|
|
|
@onready var online_check_button = %OnlineCheckButton
|
|
@onready var my_ip_label = %MyIPLabel
|
|
@onready var peers_tree = %PeersTree
|
|
|
|
@onready var settings_window = %SettingsWindow
|
|
@onready var user_name_line_edit = %UserNameLineEdit
|
|
@onready var network_name_line_edit = %NetworkNameLineEdit
|
|
@onready var network_password_line_edit = %NetworkPasswordLineEdit
|
|
@onready var server_line_edit = %ServerLineEdit
|
|
@onready var server_port_spin_box = %ServerPortSpinBox
|
|
@onready var ip_line_edit = %IPLineEdit
|
|
@onready var ip_check_button = %IPCheckButton
|
|
@onready var mac_line_edit = %MACLineEdit
|
|
@onready var mac_check_button = %MACCheckButton
|
|
@onready var compression_check_button = %CompressionCheckButton
|
|
@onready var auto_start_check_button = %AutoStartCheckButton
|
|
|
|
@onready var about_window = %AboutWindow
|
|
@onready var manual_window = %ManualWindow
|
|
|
|
var net;
|
|
|
|
|
|
func _go_offline():
|
|
#***TODO*** This can take some time. Show a message.
|
|
Peers.stop_server()
|
|
net.stop_network()
|
|
Peers.clear()
|
|
peers_tree.clear()
|
|
|
|
|
|
func _go_online():
|
|
net.reset_configuration()
|
|
net.set_addresses("" if ip_check_button.button_pressed else ip_line_edit.text, "" if mac_check_button.button_pressed else mac_line_edit.text)
|
|
net.set_compression(compression_check_button.button_pressed)
|
|
net.set_network(user_name_line_edit.text, network_name_line_edit.text, network_password_line_edit.text)
|
|
net.set_supernode(server_line_edit.text, server_port_spin_box.value)
|
|
var result = net.start_network()
|
|
if result < 0:
|
|
# Something is wrong. Cancel starting network.
|
|
online_check_button.set_pressed_no_signal(false)
|
|
# Tell them what happened.
|
|
var message = "An unknown error occurred. Code: " + str(result)
|
|
match result:
|
|
-1:
|
|
message = "Invalid edge confguration."
|
|
-2:
|
|
message = "Failed to create interface. Are you running as "
|
|
if OS.get_name() == "Windows":
|
|
message = message + "Administrator?"
|
|
else:
|
|
message = message + "root?"
|
|
-3:
|
|
message = "Failed to initialize edge node."
|
|
Dialog.alert("Error Starting Network", message)
|
|
else:
|
|
# Successful connection.
|
|
var userInfo = {}
|
|
userInfo["user"] = user_name_line_edit.text
|
|
Peers.start_server(net.get_ip(), SERVER_PORT, userInfo)
|
|
|
|
|
|
func _notification(what):
|
|
# Window manager requested app close.
|
|
if what == NOTIFICATION_WM_CLOSE_REQUEST:
|
|
_show_exit_dialog()
|
|
|
|
|
|
func _on_about_window_close_requested():
|
|
about_window.visible = false
|
|
|
|
|
|
func _on_ip_check_button_toggled(button_pressed):
|
|
ip_line_edit.editable = !ip_check_button.button_pressed
|
|
|
|
|
|
func _on_file_id_pressed(id):
|
|
match id:
|
|
FILE_ID_SETTINGS:
|
|
settings_window.visible = true
|
|
settings_window.move_to_foreground()
|
|
|
|
FILE_ID_EXIT:
|
|
_show_exit_dialog()
|
|
|
|
|
|
func _on_help_id_pressed(id):
|
|
match id:
|
|
HELP_ID_ABOUT:
|
|
about_window.visible = true
|
|
about_window.move_to_foreground()
|
|
|
|
HELP_ID_MANUAL:
|
|
manual_window.visible = true
|
|
manual_window.move_to_foreground()
|
|
|
|
|
|
func _on_mac_check_button_toggled(button_pressed):
|
|
mac_line_edit.editable = !mac_check_button.button_pressed
|
|
|
|
|
|
func _on_manual_window_close_requested():
|
|
manual_window.visible = false
|
|
|
|
|
|
func _on_online_check_button_toggled(button_pressed):
|
|
# Go online or offline.
|
|
if button_pressed:
|
|
_go_online()
|
|
else:
|
|
_go_offline()
|
|
|
|
|
|
func _on_save_settings_button_pressed():
|
|
var config = ConfigFile.new()
|
|
config.set_value("settings", "userName", user_name_line_edit.text)
|
|
config.set_value("settings", "networkName", network_name_line_edit.text)
|
|
config.set_value("settings", "networkPassword", network_password_line_edit.text)
|
|
config.set_value("settings", "server", server_line_edit.text)
|
|
config.set_value("settings", "serverPort", server_port_spin_box.value)
|
|
config.set_value("settings", "ipAddress", ip_line_edit.text)
|
|
config.set_value("settings", "ipAutomatic", ip_check_button.button_pressed)
|
|
config.set_value("settings", "macAddress", mac_line_edit.text)
|
|
config.set_value("settings", "macAutomatic", mac_check_button.button_pressed)
|
|
config.set_value("settings", "compression", compression_check_button.button_pressed)
|
|
config.set_value("settings", "autoStart", auto_start_check_button.button_pressed)
|
|
#config.set_value("settings", "position", DisplayServer.window_get_position())
|
|
config.save("user://network.cfg")
|
|
settings_window.visible = false
|
|
|
|
|
|
func _on_settings_window_close_requested():
|
|
settings_window.visible = false
|
|
|
|
|
|
func _on_timer_timeout():
|
|
# Every so often update list of connected users.
|
|
if (online_check_button.button_pressed):
|
|
# Update our IP.
|
|
my_ip_label.text = net.get_ip()
|
|
# Update list of known peers.
|
|
var peers = net.get_peers()
|
|
if Peers.update(peers):
|
|
print(Peers.peerArray)
|
|
# Redraw peer tree.
|
|
peers_tree.clear()
|
|
var root = peers_tree.create_item()
|
|
for peer in Peers.peerArray:
|
|
var child = peers_tree.create_item(root)
|
|
child.set_text(0, peer["user"] + " (" + peer["ip"] + ")")
|
|
else:
|
|
# Clear network information.
|
|
my_ip_label.text = ""
|
|
|
|
|
|
func _ready():
|
|
# Get our network object.
|
|
net = N2NVPN.new()
|
|
# Do we have a configuration yet?
|
|
var config = ConfigFile.new()
|
|
var err = config.load("user://network.cfg")
|
|
if err != OK:
|
|
# Assign defaults.
|
|
user_name_line_edit.text = "Change Me!"
|
|
network_name_line_edit.text = "Change Me!"
|
|
network_password_line_edit.text = "Change Me!"
|
|
server_line_edit.text = "supernode.kangaroopunch.com"
|
|
server_port_spin_box.value = 7777
|
|
ip_line_edit.text = "10.0.0.10"
|
|
ip_check_button.button_pressed = true
|
|
ip_line_edit.editable = false
|
|
mac_line_edit.text = "DE:AD:BE:EF:00:01"
|
|
mac_check_button.button_pressed = true
|
|
mac_line_edit.editable = false
|
|
compression_check_button.button_pressed = true
|
|
auto_start_check_button.button_pressed = false
|
|
# Show settings dialog.
|
|
settings_window.visible = true
|
|
settings_window.move_to_foreground()
|
|
else:
|
|
# Load settings.
|
|
user_name_line_edit.text = config.get_value("settings", "userName")
|
|
network_name_line_edit.text = config.get_value("settings", "networkName")
|
|
network_password_line_edit.text = config.get_value("settings", "networkPassword")
|
|
server_line_edit.text = config.get_value("settings", "server")
|
|
server_port_spin_box.value = config.get_value("settings", "serverPort")
|
|
ip_line_edit.text = config.get_value("settings", "ipAddress")
|
|
ip_check_button.button_pressed = config.get_value("settings", "ipAutomatic")
|
|
ip_line_edit.editable = !ip_check_button.button_pressed
|
|
mac_line_edit.text = config.get_value("settings", "macAddress")
|
|
mac_check_button.button_pressed = config.get_value("settings", "macAutomatic")
|
|
mac_line_edit.editable = !mac_check_button.button_pressed
|
|
compression_check_button.button_pressed = config.get_value("settings", "compression")
|
|
auto_start_check_button.button_pressed = config.get_value("settings", "autoStart")
|
|
online_check_button.button_pressed = auto_start_check_button.button_pressed
|
|
|
|
|
|
func _show_exit_dialog():
|
|
var message = "Are you sure you wish to exit?"
|
|
if online_check_button.button_pressed:
|
|
message = message + "\n\nThis will disconnect you from the network!\n"
|
|
var result = await Dialog.confirm("Exit", message)
|
|
if result:
|
|
if online_check_button.button_pressed:
|
|
_go_offline()
|
|
Engine.get_main_loop().quit()
|
|
|