Files
RebootKit/Runtime/Engine/Code/Steam/SteamManager.cs
2025-07-30 05:51:39 +02:00

60 lines
2.0 KiB
C#

using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using R3;
using RebootKit.Engine.Main;
using Steamworks;
using Logger = RebootKit.Engine.Foundation.Logger;
namespace RebootKit.Engine.Steam {
static class SteamManager {
static readonly Logger s_Logger = new Logger(nameof(SteamManager));
public static bool IsInitialized { get; private set; } = false;
internal static async UniTask InitializeAsync(CancellationToken cancellationToken = default) {
s_Logger.Info("Initializing Steam Manager...");
IsInitialized = false;
try {
SteamClient.Init(RR.EngineConfig.steamAppID, true);
} catch (Exception ex) {
s_Logger.Error($"Failed to initialize Steam Client: {ex.Message}");
return;
}
IsInitialized = true;
await UniTask.Yield(cancellationToken);
SteamFriends.OnGameRichPresenceJoinRequested += OnJoinRequested;
}
internal static void Shutdown() {
if (!IsInitialized) {
s_Logger.Error("Steam Manager is not initialized. Skipping operation.");
return;
}
s_Logger.Info("Shutting down Steam Manager...");
SteamFriends.OnGameRichPresenceJoinRequested -= OnJoinRequested;
SteamClient.Shutdown();
IsInitialized = false;
}
static void OnJoinRequested(Friend friend, string key) {
s_Logger.Info($"Join request received from {friend.Name} with key: {key}");
if (string.IsNullOrEmpty(key)) {
s_Logger.Warning("Join request key is empty. Cannot process join request.");
return;
}
if (ulong.TryParse(key, out ulong steamID)) {
RR.ConnectWithSteamID(steamID);
}
}
}
}