Server spawner / Matchmaker
This matchmaking solution consists of 3 separate programs.
(all of which use Unity3d and Mirror)
1) Headless Linux Matchmaking Server accepting connections from windows and android clients alike.
This server runs on the Linux server and waits for connections from clients.
Once it receives a connection, it executes a series of commands that will spawn the Linux Room Server.
After the roomserver is initialized, a command will be sent to all connected clients to disconnect from the matchmaker and connect directly to the room server that will start the actual match.
2) Headless Linux Room Server
This is the server where the actual match takes place in. As part of it's initialization process, it creates a MongoDB entry that contains details about the match, how many players it can accomodate and general connection info (ip address, port etc). Once all the players have connected to the server, another update is made on the database so that the central matchmaker will ignore this server until the match is complete.
3) Windows and android clients.
These will first connect to the central matchmaking server and wait for a response.
Once the match is ready to start, the matchmaker will send them the connection info for the room server, at which point they will drop the connection to the matchmaker and connect to the RoomServer and start the match.
This is by far the most complex personal project I have worked on to-date and while it does work as intended (tested with 10 simultaneous clients and matchroom sizes of maximum 4 players each), there are still many changes and parts of the code that need to be rewritten before it is ready for any kind of "live" environment.