Skip to content

Commit

Permalink
feat(server): add game version check
Browse files Browse the repository at this point in the history
  • Loading branch information
Jibbajabbafic committed Mar 11, 2024
1 parent 994b128 commit 7bb69ce
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 7 deletions.
10 changes: 8 additions & 2 deletions client/client_network.gd
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ func _on_connection_failed() -> void:
func _on_connected_to_server() -> void:
Logger.print(self, "Successfully connected to server!")
is_connected = true
send_version_info()
send_clock_sync_request()
# Start calculating latency regularly
$LatencyUpdater.start()
Expand Down Expand Up @@ -158,6 +159,11 @@ func is_rpc_from_server() -> bool:
return true


func send_version_info() -> void:
var version: String = ProjectSettings.get_setting("application/config/version")
rpc_id(SERVER_ID, "receive_version_info", version)


func send_clock_sync_request() -> void:
rpc_id(SERVER_ID, "receive_clock_sync_request", OS.get_system_time_msecs())

Expand Down Expand Up @@ -246,10 +252,10 @@ func send_kick_request(player_id: int) -> void:
rpc_id(SERVER_ID, "receive_kick_request", player_id)


remote func receive_player_kicked() -> void:
remote func receive_player_kicked(reason: String) -> void:
if is_rpc_from_server() == false:
return
lost_connection("You have been kicked from the server")
lost_connection("Kicked from server: %s" % [reason])


remote func receive_host_change(new_host_id: int) -> void:
Expand Down
19 changes: 14 additions & 5 deletions server/server_network.gd
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ var _host_player_id := 0 setget set_host
var player_state_collection := {}
var player_list := {}
var game_options := {}
var server_version := ""


func _ready() -> void:
Expand Down Expand Up @@ -90,6 +91,7 @@ func start_server(
use_tls = false
max_players = server_max_players
game_options = DEFAULT_GAME_OPTIONS.duplicate()
server_version = ProjectSettings.get_setting("application/config/version")
if forward_port:
var upnp_handler = UpnpHandler.new()
upnp_handler.set_name("UpnpHandler")
Expand Down Expand Up @@ -241,13 +243,13 @@ remote func receive_kick_request(kick_player_id: int) -> void:
)
return
Logger.print(self, "Player %s kicked player %s" % [player_id, kick_player_id])
kick_player(kick_player_id)
kick_player(kick_player_id, "Kicked by host")


func kick_player(player_id: int) -> void:
Logger.print(self, "Kicked player %s" % player_id)
rpc_id(player_id, "receive_player_kicked")
yield(get_tree().create_timer(1), "timeout")
func kick_player(player_id: int, reason: String) -> void:
Logger.print(self, "Kicked player %s for reason: %s" % [player_id, reason])
rpc_id(player_id, "receive_player_kicked", reason)
yield(get_tree().create_timer(3), "timeout")
# Just in case the player doesn't get the kicked message
if player_id in multiplayer.get_network_connected_peers():
multiplayer.network_peer.disconnect_peer(player_id)
Expand Down Expand Up @@ -420,6 +422,13 @@ func send_despawn_player(player_id: int) -> void:
rpc("receive_despawn_player", player_id)


remote func receive_version_info(client_version: String) -> void:
var player_id = multiplayer.get_rpc_sender_id()
Logger.print(self, "Received client %s on version: %s" % [player_id, client_version])
if client_version != server_version:
kick_player(player_id, "Version mismatch! Server is on: %s You have: %s" % [server_version, client_version])


remote func receive_clock_sync_request(client_time: int) -> void:
var player_id = multiplayer.get_rpc_sender_id()
rpc_id(player_id, "receive_clock_sync_response", OS.get_system_time_msecs(), client_time)
Expand Down

0 comments on commit 7bb69ce

Please sign in to comment.