aboutsummaryrefslogtreecommitdiff
path: root/client/server.gd
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-12-26 13:43:03 +0100
committermetamuffin <metamuffin@disroot.org>2024-12-26 13:43:03 +0100
commite73d6273e969f9720b9ce730c3c5825126ae892b (patch)
tree386c13a5a582e9593605dcef9b6dab7cf6b15620 /client/server.gd
parent01811610b169a0572417c1493ea606353fd1a327 (diff)
downloadhurrycurry-e73d6273e969f9720b9ce730c3c5825126ae892b.tar
hurrycurry-e73d6273e969f9720b9ce730c3c5825126ae892b.tar.bz2
hurrycurry-e73d6273e969f9720b9ce730c3c5825126ae892b.tar.zst
generalize services and add editor to play menu
Diffstat (limited to 'client/server.gd')
-rw-r--r--client/server.gd133
1 files changed, 0 insertions, 133 deletions
diff --git a/client/server.gd b/client/server.gd
deleted file mode 100644
index 4378c02d..00000000
--- a/client/server.gd
+++ /dev/null
@@ -1,133 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright 2024 metamuffin
-# Copyright 2024 nokoe
-# Copyright 2024 tpart
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name GameServer
-extends Node
-
-var thread = null
-var pid = null
-
-var state = State.TESTING
-enum State {
- TESTING,
- UNAVAILABLE,
- FAILED,
- STOPPED,
- STARTING,
- RUNNING,
-}
-
-var sem = Semaphore.new()
-var thread_result = null;
-
-func _ready():
- state = State.TESTING
- thread = Thread.new()
- thread.start(_test_server)
-
-func test():
- pass
-
-func start():
- if state != State.STOPPED and state != State.FAILED:
- push_error("server cant be started")
- return
- state = State.STARTING
- thread = Thread.new()
- thread.start(_server_exec)
-
-func stop():
- if state != State.RUNNING:
- push_error("server cant be stopped")
- return
- OS.kill(pid)
-
-func _test_server():
- var output = []
- thread_result = OS.execute(get_server_path(), ["-v"], output, true, false)
- sem.post()
-
-func _server_exec():
- var args = prepare_args()
- thread_result = OS.create_process(get_server_path(), args, false)
- if thread_result >= 0:
- var ok = false
- while not ok:
- var conn = StreamPeerTCP.new()
- if conn.connect_to_host("127.0.0.1", 27032) == OK:
- while conn.poll() == OK:
- if conn.get_status() == StreamPeerTCP.STATUS_ERROR: break
- elif conn.get_status() == StreamPeerTCP.STATUS_CONNECTED: ok = true; break
- OS.delay_msec(10)
- OS.delay_msec(500 if not ok else 50)
- if !OS.is_process_running(thread_result):
- thread_result = -1
- break
- sem.post()
-
-func prepare_args():
- var args = []
- if Global.get_setting("server.data_path") != "":
- args.push_back("--data-dir")
- args.push_back(Global.get_setting("server.data_path"))
- if Global.get_setting("server.name") != "":
- args.push_back("--server-name")
- args.push_back(Global.get_setting("server.name"))
- if Global.get_setting("server.mdns"):
- args.push_back("--mdns")
- if Global.get_setting("server.upnp"):
- args.push_back("--upnp")
- if Global.get_setting("server.register"):
- args.push_back("--register")
- return args
-
-func get_server_path() -> String:
- var path: String = Global.get_setting("server.binary_path")
- if path != "":
- return path
- else:
- return "hurrycurry-server"
-
-func _process(_delta):
- match state:
- State.TESTING:
- if sem.try_wait():
- print("Server: Test result=", thread_result)
- if thread_result == 0: state = State.STOPPED
- else: state = State.UNAVAILABLE
- thread.wait_to_finish()
- thread = null
- State.STARTING:
- if sem.try_wait():
- if thread_result >= 0:
- state = State.RUNNING
- pid = thread_result
- print("Server: Started pid=", thread_result)
- else:
- state = State.FAILED
- print("Server: Failed")
- thread.wait_to_finish()
- thread = null
- State.RUNNING:
- if not OS.is_process_running(pid):
- print("Server: Stopped")
- state = State.STOPPED
- pid = null
-
-func _exit_tree():
- if thread != null: thread.wait_to_finish()
- if pid != null: OS.kill(pid)