Networking/LobbyMetadata.cs
using Sandbox.Network;

namespace Emulotl;

public static class LobbyDataKeys
{
	public const string GameTitle = "rom";
	public const string GameCode = "code";
	public const string GameSha1 = "sha1";
	public const string Visibility = "vis";
	public const string HostName = "host";
	public const string Mode = "mode";
}

public static class LobbyMetadata
{
	public static string GetGameTitle( this LobbyInformation lobby ) =>
		lobby.Get( LobbyDataKeys.GameTitle, string.Empty );

	public static string GetGameCode( this LobbyInformation lobby ) =>
		lobby.Get( LobbyDataKeys.GameCode, string.Empty );

	public static string GetGameSha1( this LobbyInformation lobby ) =>
		lobby.Get( LobbyDataKeys.GameSha1, string.Empty );

	public static string GetHostName( this LobbyInformation lobby ) =>
		lobby.Get( LobbyDataKeys.HostName, string.Empty );

	public static SessionVisibility GetVisibility( this LobbyInformation lobby )
	{
		var raw = lobby.Get( LobbyDataKeys.Visibility, "0" );
		return int.TryParse( raw, out var v ) ? (SessionVisibility)v : SessionVisibility.Public;
	}

	public static SessionMode GetMode( this LobbyInformation lobby )
	{
		var raw = lobby.Get( LobbyDataKeys.Mode, "0" );
		return int.TryParse( raw, out var v ) ? (SessionMode)v : SessionMode.WirelessAdapter;
	}
}