Files
Nebula-Auth/SteamLibForked/ProtoCore/ProtoResponse.cs
T
achiez 8ff960189e 1.5.6 Bug fixes and code clean-ups
- Update: Added "Copy Password" to Mafile context menu (if available)
- Update: "Save Password" now pre-fills the current password in the "Login Again" dialog when encryption is enabled
- Fix: Prevented overlapping confirmation cycles in AutoConfirmer
- Fix: Added a Snackbar notification when a confirmation cycle is skipped due to a too frequent timer interval
- Fix: Fixed a rare bug where the previous proxy was used instead of the current one during session refresh
- Fix: Corrected "Session Permanently Expired" message showing on unrelated errors (e.g. network issues)
- UI-Fix: Fixed visual glitch where proxy input appeared non-empty when switching to a mafile-specific proxy
- Cleanup: Refactored and cleaned up codebase, improved styling and formatting via ReSharper
2025-05-02 23:29:24 +03:00

105 lines
2.9 KiB
C#

using ProtoBuf;
using SteamLib.ProtoCore.Enums;
using SteamLib.ProtoCore.Interfaces;
namespace SteamLib.ProtoCore;
public class ProtoResponse
{
public EResult Result { get; }
public IProtoMsg? ProtoObject { get; protected set; }
protected ProtoResponse(EResult result, IProtoMsg? protoObject)
{
Result = result;
ProtoObject = protoObject;
}
}
public class ProtoResponse<TProtoResponse> : ProtoResponse
where TProtoResponse : IProtoMsg
{
public TProtoResponse? ResponseMsg
{
get => ProtoObject == null ? default : (TProtoResponse) ProtoObject;
set => ProtoObject = value;
}
public ProtoResponse(EResult result, TProtoResponse? protoObject) : base(result, protoObject)
{
}
public static ProtoResponse<TProtoResponse> FromHttpResponse(HttpResponseMessage response)
{
response.EnsureSuccessStatusCode();
var eResult = EResult.Invalid;
if (response.Headers.TryGetValues("x-eresult", out var val))
{
var eResultInt = Convert.ToInt32(val.Single());
eResult = (EResult) eResultInt;
}
var msg = default(TProtoResponse);
Stream? stream = null;
try
{
stream = response.Content.ReadAsStream();
msg = Serializer.Deserialize<TProtoResponse>(stream);
}
catch
{
//Ignored
}
finally
{
stream?.Dispose();
}
return new ProtoResponse<TProtoResponse>(eResult, msg);
}
public static async Task<ProtoResponse<TProtoResponse>> FromHttpResponseAsync(HttpResponseMessage response,
CancellationToken cancellationToken = default)
{
response.EnsureSuccessStatusCode();
var eResult = EResult.Invalid;
if (response.Headers.TryGetValues("x-eresult", out var val))
{
var eResultInt = Convert.ToInt32(val.Single());
eResult = (EResult) eResultInt;
}
var msg = default(TProtoResponse);
Stream? stream = null;
try
{
stream = await response.Content.ReadAsStreamAsync(cancellationToken);
msg = Serializer.Deserialize<TProtoResponse>(stream);
}
catch
{
//Ignored
}
finally
{
if (stream != null) await stream.DisposeAsync();
}
return new ProtoResponse<TProtoResponse>(eResult, msg);
}
/// <summary>
/// Ensures that <see cref="ResponseMsg" /> is not <see langword="null" /> and returns it otherwise throws
/// <see cref="NullReferenceException" />.
/// </summary>
/// <returns></returns>
/// <exception cref="NullReferenceException"></exception>
public TProtoResponse GetResponse()
{
if (ResponseMsg == null)
throw new NullReferenceException("ResponseMsg in response was null");
return ResponseMsg;
}
}