extends Node
|
|
|
|
var SERVER_TO_SERVER_PORT = 54671
|
|
var MATCHMAKING_PORT = 54672
|
|
var SERVER_SIZE = 6
|
|
|
|
var next_port = 54673
|
|
|
|
# Filled with queue info which contains
|
|
# { "netid" }
|
|
var queue = []
|
|
var skirmish
|
|
# To avoid the confusion of the gameSERVERS being CLIENTS,
|
|
# we just call them games whenever possible
|
|
var games = []
|
|
var game_connections = []
|
|
var game_streams = []
|
|
|
|
# Matchmaker to game servers
|
|
var matchmaker_to_games
|
|
|
|
func _ready():
|
|
set_process(false)
|
|
|
|
func run_matchmaker():
|
|
skirmish = spawn_server()
|
|
matchmaker_to_games = TCP_Server.new()
|
|
if matchmaker_to_games.listen(SERVER_TO_SERVER_PORT):
|
|
print("Error, could not listen")
|
|
set_process(true)
|
|
|
|
func _process(delta):
|
|
# Manage connection to GAMESERVERS (not clients)
|
|
if matchmaker_to_games.is_connection_available(): # check if a gameserver's trying to connect
|
|
var game = matchmaker_to_games.take_connection() # accept connection
|
|
game_connections.append(game) # store the connection
|
|
var stream = PacketPeerStream.new()
|
|
stream.set_stream_peer(game) # bind peerstream to new client
|
|
game_streams.append(stream) # make new data transfer object for game
|
|
print("Server has requested connection")
|
|
|
|
master func _queue(info):
|
|
queue.push(info)
|
|
check_queue()
|
|
|
|
func check_queue():
|
|
if queue.size() >= SERVER_SIZE:
|
|
var port = spawn_server()
|
|
games.push(port)
|
|
for p in queue:
|
|
rpc_id(p.netid, "join_game", port)
|
|
|
|
func spawn_server():
|
|
OS.execute("util/server.sh", [], false)
|
|
next_port += 1
|
|
return (next_port - 1) # Return original port
|
|
|