mirror of
https://github.com/JDM170/SteamAchievementManager
synced 2025-12-10 05:37:18 +07:00
Throw exception for client initialization failure.
This commit is contained in:
@@ -27,7 +27,7 @@ using System.Linq;
|
||||
|
||||
namespace SAM.API
|
||||
{
|
||||
public class Client
|
||||
public class Client : IDisposable
|
||||
{
|
||||
public Wrappers.SteamClient018 SteamClient;
|
||||
public Wrappers.SteamUser012 SteamUser;
|
||||
@@ -36,61 +36,71 @@ namespace SAM.API
|
||||
public Wrappers.SteamApps001 SteamApps001;
|
||||
public Wrappers.SteamApps003 SteamApps003;
|
||||
|
||||
private bool _IsDisposed = false;
|
||||
private int _Pipe;
|
||||
private int _User;
|
||||
|
||||
private readonly List<ICallback> _Callbacks = new List<ICallback>();
|
||||
|
||||
public bool Initialize(long appId)
|
||||
public void Initialize(long appId)
|
||||
{
|
||||
if (string.IsNullOrEmpty(Steam.GetInstallPath()) == true)
|
||||
{
|
||||
throw new ClientInitializeException(ClientInitializeFailure.GetInstallPath, "failed to get Steam install path");
|
||||
}
|
||||
|
||||
if (appId != 0)
|
||||
{
|
||||
Environment.SetEnvironmentVariable("SteamAppId", appId.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
|
||||
if (Steam.GetInstallPath() == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Steam.Load() == false)
|
||||
{
|
||||
return false;
|
||||
throw new ClientInitializeException(ClientInitializeFailure.Load, "failed to load SteamClient");
|
||||
}
|
||||
|
||||
this.SteamClient = Steam.CreateInterface<Wrappers.SteamClient018>("SteamClient018");
|
||||
if (this.SteamClient == null)
|
||||
{
|
||||
return false;
|
||||
throw new ClientInitializeException(ClientInitializeFailure.CreateSteamClient, "failed to create ISteamClient018");
|
||||
}
|
||||
|
||||
this._Pipe = this.SteamClient.CreateSteamPipe();
|
||||
if (this._Pipe == 0)
|
||||
{
|
||||
return false;
|
||||
throw new ClientInitializeException(ClientInitializeFailure.CreateSteamPipe, "failed to create pipe");
|
||||
}
|
||||
|
||||
this._User = this.SteamClient.ConnectToGlobalUser(this._Pipe);
|
||||
if (this._User == 0)
|
||||
{
|
||||
return false;
|
||||
throw new ClientInitializeException(ClientInitializeFailure.ConnectToGlobalUser, "failed to connect to global user");
|
||||
}
|
||||
|
||||
this.SteamUtils = this.SteamClient.GetSteamUtils004(this._Pipe);
|
||||
if (appId > 0 && this.SteamUtils.GetAppId() != (uint)appId)
|
||||
{
|
||||
return false;
|
||||
throw new ClientInitializeException(ClientInitializeFailure.AppIdMismatch, "appID mismatch");
|
||||
}
|
||||
|
||||
this.SteamUser = this.SteamClient.GetSteamUser012(this._User, this._Pipe);
|
||||
this.SteamUserStats = this.SteamClient.GetSteamUserStats006(this._User, this._Pipe);
|
||||
this.SteamApps001 = this.SteamClient.GetSteamApps001(this._User, this._Pipe);
|
||||
this.SteamApps003 = this.SteamClient.GetSteamApps003(this._User, this._Pipe);
|
||||
return true;
|
||||
}
|
||||
|
||||
~Client()
|
||||
{
|
||||
this.Dispose(false);
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (this._IsDisposed == true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.SteamClient != null && this._Pipe > 0)
|
||||
{
|
||||
if (this._User > 0)
|
||||
@@ -98,10 +108,18 @@ namespace SAM.API
|
||||
this.SteamClient.ReleaseUser(this._Pipe, this._User);
|
||||
this._User = 0;
|
||||
}
|
||||
|
||||
|
||||
this.SteamClient.ReleaseSteamPipe(this._Pipe);
|
||||
this._Pipe = 0;
|
||||
}
|
||||
|
||||
this._IsDisposed = true;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public TCallback CreateAndRegisterCallback<TCallback>()
|
||||
|
||||
50
SAM.API/ClientInitializeException.cs
Normal file
50
SAM.API/ClientInitializeException.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
/* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us)
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would
|
||||
* be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not
|
||||
* be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
using System;
|
||||
|
||||
namespace SAM.API
|
||||
{
|
||||
public class ClientInitializeException : Exception
|
||||
{
|
||||
public readonly ClientInitializeFailure Failure;
|
||||
|
||||
public ClientInitializeException(ClientInitializeFailure failure)
|
||||
{
|
||||
this.Failure = failure;
|
||||
}
|
||||
|
||||
public ClientInitializeException(ClientInitializeFailure failure, string message)
|
||||
: base(message)
|
||||
{
|
||||
this.Failure = failure;
|
||||
}
|
||||
|
||||
public ClientInitializeException(
|
||||
ClientInitializeFailure failure,
|
||||
string message,
|
||||
Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
this.Failure = failure;
|
||||
}
|
||||
}
|
||||
}
|
||||
34
SAM.API/ClientInitializeFailure.cs
Normal file
34
SAM.API/ClientInitializeFailure.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
/* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us)
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any damages
|
||||
* arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would
|
||||
* be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must not
|
||||
* be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*/
|
||||
namespace SAM.API
|
||||
{
|
||||
public enum ClientInitializeFailure : byte
|
||||
{
|
||||
Unknown = 0,
|
||||
GetInstallPath,
|
||||
Load,
|
||||
CreateSteamClient,
|
||||
CreateSteamPipe,
|
||||
ConnectToGlobalUser,
|
||||
AppIdMismatch,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user