60 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |