summaryrefslogtreecommitdiff
path: root/Game/Lobby
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Lobby')
-rw-r--r--Game/Lobby/Server/index.php189
-rw-r--r--Game/Lobby/games_lobby.gd (renamed from Game/Lobby/game_lobby.gd)15
-rw-r--r--Game/Lobby/games_lobby.gd.uid1
3 files changed, 105 insertions, 100 deletions
diff --git a/Game/Lobby/Server/index.php b/Game/Lobby/Server/index.php
index ae734a6..7d12195 100644
--- a/Game/Lobby/Server/index.php
+++ b/Game/Lobby/Server/index.php
@@ -19,101 +19,104 @@ $db = new PDO('sqlite:./' . $dbname, options: [
if (php_sapi_name() == 'cli') {
if ($argv[$argc - 1] == 'init-db') {
- $db->query(<<<SQL
- create table if not exists games (
- id text primary key,
- ip text unique,
- port integer,
- creation_time integer,
- ping_time integer,
- name text,
- secret text
- );
- SQL)
- ->execute();
+ $db->query(<<<SQL
+ create table if not exists games (
+ id text primary key,
+ ip text unique,
+ port integer,
+ creation_time integer,
+ ping_time integer,
+ name text,
+ secret text
+ );
+ SQL)
+ ->execute();
}
return;
}
-$url = parse_url("$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
+$url = parse_url("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST') {
$inputPost = json_decode(file_get_contents('php://input'), true);
if ($inputPost) {
- $_POST = $inputPost + $_POST;
+ $_POST = $inputPost + $_POST;
}
}
$response = [];
if ($method == 'POST' && $url['path'] == '/host') {
- $ip = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP);
+ $ip = filter_var(
+ $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'],
+ FILTER_VALIDATE_IP
+ );
if ($ip === false) {
- $response = [
- 'success' => false,
- 'error' => 'Invalid IP.',
- ];
+ $response = [
+ 'success' => false,
+ 'error' => 'Invalid IP.',
+ ];
}
else {
- $port = intval($_POST['port']);
- $name = $_POST['name'];
- $id = md5($name . time());
- $secret = md5($id . random_bytes($port));
-
- $success = $db->prepare(<<<SQL
- insert or replace into games (id, ip, port, creation_time, ping_time, name, secret) values (:id, :ip, :port, :timestamp, :timestamp, :name, :secret)
- SQL)
- ->execute([
- 'id' => $id,
- 'ip' => $ip,
- 'port' => $port,
- 'timestamp' => time(),
- 'name' => $name,
- 'secret' => $secret,
- ]);
-
- if ($success) {
- $response = [
- 'success' => $success,
- 'data' => [
- 'id' => $id,
- 'secret' => $secret,
- ],
- ];
- } else {
- $response = [
- 'success' => $success,
- 'error' => $db->errorInfo(),
- ];
- }
+ $port = intval($_POST['port']);
+ $name = $_POST['name'];
+ $id = md5($name . time());
+ $secret = md5($id . random_bytes($port));
+
+ $success = $db->prepare(<<<SQL
+ insert or replace into games (id, ip, port, creation_time, ping_time, name, secret) values (:id, :ip, :port, :timestamp, :timestamp, :name, :secret)
+ SQL)
+ ->execute([
+ 'id' => $id,
+ 'ip' => $ip,
+ 'port' => $port,
+ 'timestamp' => time(),
+ 'name' => $name,
+ 'secret' => $secret,
+ ]);
+
+ if ($success) {
+ $response = [
+ 'success' => $success,
+ 'data' => [
+ 'id' => $id,
+ 'secret' => $secret,
+ ],
+ ];
+ } else {
+ $response = [
+ 'success' => $success,
+ 'error' => $db->errorInfo(),
+ ];
+ }
}
}
else if ($method == 'GET' && $url['path'] == '/get-list') {
$statement = $db->prepare(<<<SQL
- select id, name from games
- where ping_time > :comparison_time
- SQL);
+ select id, name from games
+ where ping_time > :comparison_time
+ SQL);
$statement->execute([
- 'comparison_time' => time() - $timeoutMax,
+ 'comparison_time' => time() - $timeoutMax,
]);
$results = $statement->fetchAll();
$list = [];
foreach ($results as $row) {
- $list[] = [
- 'id' => $row['id'],
- 'name' => $row['name'],
- ];
+ $list[] = [
+ 'id' => $row['id'],
+ 'name' => $row['name'],
+ ];
}
$response = [
- 'success' => true,
- 'data' => $list,
+ 'success' => true,
+ 'data' => $list,
];
}
@@ -121,30 +124,30 @@ else if ($method == 'GET' && $url['path'] == '/join') {
$id = $_GET['id'];
$statement = $db->prepare(<<<SQL
- select ip, port from games
- where id = :id
- SQL);
+ select ip, port from games
+ where id = :id
+ SQL);
$statement->execute([
- 'id' => $id,
+ 'id' => $id,
]);
$result = $statement->fetch();
if ($result === false) {
- $response = [
- 'success' => false,
- 'error' => 'Game not found.'
- ];
- http_response_code(404);
+ $response = [
+ 'success' => false,
+ 'error' => 'Game not found.'
+ ];
+ http_response_code(404);
}
else {
- $response = [
- 'success' => true,
- 'data' => [
- 'ip' => $result['ip'],
- 'port' => $result['port'],
- ],
- ];
+ $response = [
+ 'success' => true,
+ 'data' => [
+ 'ip' => $result['ip'],
+ 'port' => $result['port'],
+ ],
+ ];
}
}
@@ -153,15 +156,15 @@ else if ($method == 'POST' && $url['path'] == '/close') {
$secret = $_POST['secret'];
$success = $db->prepare(<<<SQL
- delete from games where id = :id and secret = :secret
- SQL)
- ->execute([
- 'id' => $id,
- 'secret' => $secret,
- ]);
+ delete from games where id = :id and secret = :secret
+ SQL)
+ ->execute([
+ 'id' => $id,
+ 'secret' => $secret,
+ ]);
$response = [
- 'success' => $success,
+ 'success' => $success,
];
}
@@ -170,23 +173,23 @@ else if ($method == 'POST' && $url['path'] == '/keep-alive') {
$secret = $_POST['secret'];
$success = $db->prepare(<<<SQL
- update games set ping_time = :ping_time where id = :id and secret = :secret
- SQL)
- ->execute([
- 'id' => $id,
- 'secret' => $secret,
- 'ping_time' => time(),
- ]);
+ update games set ping_time = :ping_time where id = :id and secret = :secret
+ SQL)
+ ->execute([
+ 'id' => $id,
+ 'secret' => $secret,
+ 'ping_time' => time(),
+ ]);
$response = [
- 'success' => $success,
+ 'success' => $success,
];
}
else {
$response = [
- 'success' => false,
- 'error' => 'Route not found.'
+ 'success' => false,
+ 'error' => 'Route not found.'
];
http_response_code(404);
}
diff --git a/Game/Lobby/game_lobby.gd b/Game/Lobby/games_lobby.gd
index 6bfa8be..3d54059 100644
--- a/Game/Lobby/game_lobby.gd
+++ b/Game/Lobby/games_lobby.gd
@@ -1,7 +1,7 @@
extends Node
-class HTTPRequestConfig extends Resource:
+class HTTPRequestConfig:
var headers: PackedStringArray
var method: HTTPClient.Method
var data: Dictionary
@@ -20,7 +20,7 @@ class HTTPRequestConfig extends Resource:
self.node = node
-class HTTPResponse extends Resource:
+class HTTPResponse:
var result_code: HTTPRequest.Result
var response_code: int
var headers: PackedStringArray
@@ -42,8 +42,8 @@ func request(
get_tree().root.add_child(config.node)
if config.method == HTTPClient.METHOD_POST:
- config.set("id", current_game_id)
- config.set("secret", current_secret)
+ config.data["id"] = current_game_id
+ config.data["secret"] = current_secret
var response = HTTPResponse.new()
config.node.request_completed.connect(
@@ -60,6 +60,7 @@ func request(
get_tree().root.remove_child(config.node)
)
+
config.node.request(
"%s%s" % [server_base_url, url],
config.headers,
@@ -71,19 +72,19 @@ func request(
return response
-func request_get(url: String, headers := PackedStringArray()):
+func request_get(url: String, headers := PackedStringArray()) -> HTTPResponse:
var config := HTTPRequestConfig.new(headers)
return await request(url, config)
-func request_post(url: String, data: Dictionary = {}, headers := PackedStringArray()):
+func request_post(url: String, data: Dictionary = {}, headers := PackedStringArray()) -> HTTPResponse:
var config := HTTPRequestConfig.new(headers, HTTPClient.METHOD_POST, data)
return await request(url, config)
func check_available() -> bool:
- var response = await GameLobby.request_get("")
+ var response := await GameLobby.request_get("")
return response.result_code == HTTPRequest.RESULT_SUCCESS
diff --git a/Game/Lobby/games_lobby.gd.uid b/Game/Lobby/games_lobby.gd.uid
new file mode 100644
index 0000000..02c3529
--- /dev/null
+++ b/Game/Lobby/games_lobby.gd.uid
@@ -0,0 +1 @@
+uid://di71agk265b8k