public Client(uint appId) { if (Instance != null) { throw new System.Exception("Only one Facepunch.Steamworks.Client can exist - dispose the old one before trying to create a new one."); } Instance = this; native = new Interop.NativeInterface(); // // Get other interfaces // if (!native.InitClient(this)) { native.Dispose(); native = null; Instance = null; return; } // // Setup interfaces that client and server both have // SetupCommonInterfaces(); // // Client only interfaces // Voice = new Voice(this); ServerList = new ServerList(this); LobbyList = new LobbyList(this); App = new App(this); Stats = new Stats(this); Achievements = new Achievements(this); MicroTransactions = new MicroTransactions(this); User = new User(this); RemoteStorage = new RemoteStorage(this); Workshop.friends = Friends; Stats.UpdateStats(); // // Cache common, unchanging info // AppId = appId; Username = native.friends.GetPersonaName(); SteamId = native.user.GetSteamID(); BetaName = native.apps.GetCurrentBetaName(); OwnerSteamId = native.apps.GetAppOwner(); var appInstallDir = native.apps.GetAppInstallDir(AppId); if (!String.IsNullOrEmpty(appInstallDir) && Directory.Exists(appInstallDir)) { InstallFolder = new DirectoryInfo(appInstallDir); } BuildId = native.apps.GetAppBuildId(); CurrentLanguage = native.apps.GetCurrentGameLanguage(); AvailableLanguages = native.apps.GetAvailableGameLanguages().Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); // TODO: Assumed colon separated // // Run update, first call does some initialization // Update(); }