// using System.Collections.Generic; // using System.IO; // using UnityEngine; // using Steamworks; // using Logic.CrashSight; // using TH1_Logic.Net; // // // namespace TH1_Logic.Steam // { // public class TH1SteamManager // { // public static TH1SteamManager Instance { get; } = new TH1SteamManager(); // // [Header("Steam 连接状态")] // public bool IsSteamInitialized = false; // public bool IsLoggedIn = false; // public string CurrentUserName = ""; // public CSteamID CurrentUserID; // // [Header("房间测试")] // private int _maxLobbyMembers = 4; // private SteamLobbyManager _lobby; // private GameObject _guiObj; // // // // 初始化Steam // public void Init() // { // LogSystem.LogInfo("开始初始化Steam..."); // LogSystem.LogInfo($"启动方式检测: {(SteamAPI.RestartAppIfNecessary(new Steamworks.AppId_t(480)) ? "需要通过Steam启动" : "直接启动或已通过Steam启动")}"); // // // 检查Steam是否运行 // if (!SteamAPI.IsSteamRunning()) // { // LogSystem.LogError("Steam客户端未运行!请先启动Steam。"); // return; // } // // // 检查steam_appid.txt文件状态 // CheckSteamAppIdFile(); // // // 初始化Steam API // IsSteamInitialized = SteamAPI.Init(); // // if (!IsSteamInitialized) // { // LogSystem.LogError("Steam API初始化失败!"); // LogSystem.LogError("可能的原因:"); // LogSystem.LogError("1. Steam客户端未运行"); // LogSystem.LogError("2. steam_appid.txt文件配置错误(开发环境)"); // LogSystem.LogError("3. 没有以Steam方式启动应用(开发环境)"); // LogSystem.LogError("4. Steam App ID不匹配"); // return; // } // LogSystem.LogInfo("Steam API初始化成功!"); // // // 检查用户登录状态 // try // { // CheckUserLoginStatus(); // } // catch (System.Exception e) // { // LogSystem.LogError($"检查用户登录状态异常: {e.Message}"); // } // // // 显示启动信息 // DisplayLaunchInfo(); // // // 初始化Steam房间管理器 // try // { // InitializeSteamLobbyManager(); // } // catch (System.Exception e) // { // LogSystem.LogError($"Steam房间管理器初始化异常: {e.Message}"); // } // // LogSystem.LogInfo("Steam测试环境初始化完成!"); // // // 构建 GUI 输入 Mono // _guiObj = new GameObject(); // _guiObj.name = "SteamGUI"; // _guiObj.AddComponent(); // _guiObj.SetActive(true); // } // // // 定时更新 // public void Update() // { // if (!IsSteamInitialized || !IsLoggedIn) return; // // // 更新Steam回调 // SteamAPI.RunCallbacks(); // // // 更新P2P消息 // _lobby.Update(); // } // // /// // /// 检查steam_appid.txt文件状态 // /// // private void CheckSteamAppIdFile() // { // string steamAppIdPath = Path.Combine(Directory.GetCurrentDirectory(), "steam_appid.txt"); // // if (File.Exists(steamAppIdPath)) // { // try // { // string content = File.ReadAllText(steamAppIdPath).Trim(); // LogSystem.LogInfo($"发现steam_appid.txt文件,App ID: {content}"); // } // catch (System.Exception e) // { // LogSystem.LogWarning($"读取steam_appid.txt失败: {e.Message}"); // } // } // else // { // LogSystem.LogInfo("未发现steam_appid.txt文件 - 这在Steam平台发布时是正常的"); // } // } // // /// // /// 显示启动信息 // /// // private void DisplayLaunchInfo() // { // if (!IsSteamInitialized) return; // // // 获取当前App ID // var currentAppId = SteamUtils.GetAppID(); // LogSystem.LogInfo($"当前Steam App ID: {currentAppId}"); // // // 检查启动方式 // bool launchedViaSteam = SteamApps.BIsSubscribedApp(currentAppId); // LogSystem.LogInfo($"通过Steam启动: {(launchedViaSteam ? "是" : "否")}"); // // // 显示Steam环境信息 // LogSystem.LogInfo($"Steam语言: {SteamApps.GetCurrentGameLanguage()}"); // LogSystem.LogInfo($"Steam服务器连接: {(SteamUser.BLoggedOn() ? "已连接" : "未连接")}"); // // // 检查DLC和订阅状态 // if (currentAppId.m_AppId == 480) // Spacewar测试应用 // { // LogSystem.LogInfo("当前使用Spacewar测试应用 - 适用于开发测试"); // } // else // { // LogSystem.LogInfo($"当前使用正式应用ID: {currentAppId.m_AppId}"); // } // } // // /// // /// 检查用户登录状态 // /// // private void CheckUserLoginStatus() // { // if (!IsSteamInitialized) return; // // IsLoggedIn = SteamUser.BLoggedOn(); // // if (IsLoggedIn) // { // CurrentUserID = SteamUser.GetSteamID(); // CurrentUserName = SteamFriends.GetPersonaName(); // LogSystem.LogInfo($"Steam用户已登录: {CurrentUserName} ({CurrentUserID})"); // } // else // { // LogSystem.LogWarning("Steam用户未登录"); // } // } // // /// // /// 初始化Steam房间管理器 // /// // private void InitializeSteamLobbyManager() // { // if (!IsSteamInitialized || !IsLoggedIn) return; // try // { // _lobby ??= new SteamLobbyManager(); // // 初始化房间管理器 // _lobby.InitCallbacks(); // // // 订阅事件 // _lobby.OnLobbyCreatedEvent += OnLobbyCreated; // _lobby.OnLobbyEnteredEvent += OnLobbyEntered; // _lobby.OnLobbyLeftEvent += OnLobbyLeft; // _lobby.OnMemberJoinedEvent += OnMemberJoined; // _lobby.OnMemberLeftEvent += OnMemberLeft; // _lobby.OnHostChangedEvent += OnHostChanged; // _lobby.OnLobbyErrorEvent += OnLobbyError; // // // 订阅P2P事件 // SimpleP2P.Instance.OnPeerConnectedEvent += OnP2PPeerConnected; // SimpleP2P.Instance.OnPeerDisconnectedEvent += OnP2PPeerDisconnected; // SimpleP2P.Instance.OnMessageReceivedEvent += OnP2PMessageReceived; // SimpleP2P.Instance.OnConnectionErrorEvent += OnP2PConnectionError; // // LogSystem.LogInfo("Steam房间管理器初始化成功!"); // LobbyManager.Instance.Lobby = _lobby; // } // catch (System.Exception e) // { // LogSystem.LogError($"Steam房间管理器初始化失败: {e.Message}"); // } // } // // private void OnDestroy() // { // if (IsSteamInitialized) // { // _lobby.Cleanup(); // SteamAPI.Shutdown(); // LogSystem.LogInfo("Steam API已关闭"); // } // } // // #region 房间事件处理 // // private void OnLobbyCreated(CSteamID lobbyId) // { // LogSystem.LogInfo($"[测试] 房间创建成功: {lobbyId}"); // } // // private void OnLobbyEntered(CSteamID lobbyId) // { // LogSystem.LogInfo($"[测试] 进入房间: {lobbyId}"); // LogSystem.LogInfo($"[测试] 房间成员数: {_lobby.GetMemberCount()}/{_lobby.GetMemberLimit()}"); // } // // private void OnLobbyLeft() // { // LogSystem.LogInfo("[测试] 离开房间"); // } // // private void OnMemberJoined(CSteamID memberId) // { // string memberName = SteamFriends.GetFriendPersonaName(memberId); // LogSystem.LogInfo($"[测试] 成员加入: {memberName} ({memberId})"); // } // // private void OnMemberLeft(CSteamID memberId) // { // string memberName = SteamFriends.GetFriendPersonaName(memberId); // LogSystem.LogInfo($"[测试] 成员离开: {memberName} ({memberId})"); // } // // private void OnHostChanged(CSteamID oldHost, CSteamID newHost) // { // string oldHostName = SteamFriends.GetFriendPersonaName(oldHost); // string newHostName = SteamFriends.GetFriendPersonaName(newHost); // LogSystem.LogInfo($"[测试] 房主变更: {oldHostName} -> {newHostName}"); // } // // private void OnLobbyError(string error) // { // LogSystem.LogError($"[测试] 房间错误: {error}"); // } // // #endregion // // #region P2P事件处理 // // private void OnP2PPeerConnected(CSteamID peerId) // { // string peerName = SteamFriends.GetFriendPersonaName(peerId); // LogSystem.LogInfo($"[测试] P2P连接建立: {peerName} ({peerId})"); // } // // private void OnP2PPeerDisconnected(CSteamID peerId) // { // string peerName = SteamFriends.GetFriendPersonaName(peerId); // LogSystem.LogInfo($"[测试] P2P连接断开: {peerName} ({peerId})"); // } // // private void OnP2PMessageReceived(CSteamID senderId, byte[] data) // { // string senderName = SteamFriends.GetFriendPersonaName(senderId); // string message = System.Text.Encoding.UTF8.GetString(data); // LogSystem.LogInfo($"[测试] 收到P2P消息 from {senderName}: {message}"); // } // // private void OnP2PConnectionError(string error) // { // LogSystem.LogError($"[测试] P2P连接错误: {error}"); // } // // #endregion // // #region 测试方法 // // // 创建测试房间 // public void CreateLobby() // { // if (!CanPerformLobbyAction()) return; // // LogSystem.LogInfo("[测试] 创建房间..."); // _lobby.CreateFriendsLobby(_maxLobbyMembers); // } // // // 离开房间 // public void LeaveLobby() // { // if (!_lobby.IsInLobby()) // { // LogSystem.LogWarning("[测试] 当前不在房间中"); // return; // } // // LogSystem.LogInfo("[测试] 离开房间..."); // _lobby.LeaveLobby(); // } // // // 解散房间 // public void DisbandLobby() // { // if (!_lobby.IsInLobby()) // { // LogSystem.LogWarning("[测试] 当前不在房间中"); // return; // } // // if (!_lobby.IsLobbyOwner()) // { // LogSystem.LogWarning("[测试] 只有房主可以解散房间"); // return; // } // // LogSystem.LogInfo("[测试] 解散房间..."); // _lobby.DisbandLobby(); // } // // // 发送测试消息 // public void SendMessage() // { // if (!_lobby.IsInLobby()) // { // LogSystem.LogWarning("[测试] 当前不在房间中,无法发送消息"); // return; // } // // string testMessage = $"测试消息 from {CurrentUserName} at {System.DateTime.Now:HH:mm:ss}"; // GameNetSender.Instance.BroadcastString(testMessage); // LogSystem.LogInfo($"[测试] 广播消息: {testMessage}"); // } // // // 显示在线好友 // public void ShowOnlineFriends() // { // if (!CanPerformLobbyAction()) return; // // var friends = _lobby.GetOnlineFriends(); // LogSystem.LogInfo($"[测试] 在线好友数量: {friends.Count}"); // // foreach (var friend in friends) // { // LogSystem.LogInfo($"[测试] 好友: {friend.name} ({friend.id})"); // } // } // // // 打开邀请界面 // public void OpenInviteOverlay() // { // if (!_lobby.IsInLobby()) // { // LogSystem.LogWarning("[测试] 当前不在房间中,无法邀请好友"); // return; // } // // LogSystem.LogInfo("[测试] 打开Steam邀请界面..."); // _lobby.OpenInviteOverlay(); // } // // private bool CanPerformLobbyAction() // { // if (!IsSteamInitialized) // { // LogSystem.LogError("[测试] Steam未初始化"); // return false; // } // // if (!IsLoggedIn) // { // LogSystem.LogError("[测试] Steam用户未登录"); // return false; // } // // return true; // } // // #endregion // } // }