Host isn't actually who's hosting the server instance, it's more like "channel operator". The first player to join the channel is designated the host. There's a few ways to migrate from one server to another. You could have the current server send out an RFC designating which player is to start up the new server instance right before shutting down, but that wouldn't work if the current server host crashes, only if they gracefully exit. This is an easier problem to solve when it's fully p2p. Unfortunately TNet is not :p
Here's what I'd try doing (it's no small feat):
* Lobby Server keeps track of players connected to each registered game server
* When Lobby Server detects that a game server shuts down with players still connected:
* Run some logic to determine which player should be the new server (ping-based, or entirely random)
* Send packet to that player notifying them to start up the server instance
* Wait until the new server instance from that player is registered
* Send packet to every other player that was on the original game server, notifying them of the new server instance
* Other players receive the packet notifying them of the new server instance and connect as usual
As for your other question, you'd need to take a look at TNLobbyLink.cs, TNLobbyServer.cs, TNLobbyClient.cs, and TNServerList.cs
You're correct, you'd need to send the channel info from the game server to the lobby server and parse that on the lobby client.