DO-79 [Feat] 강제 종료 처리

This commit is contained in:
Sehyeon 2025-03-28 13:21:52 +09:00
parent a06f9809de
commit 9abc67f9c6
4 changed files with 40 additions and 5 deletions

View File

@ -31,6 +31,7 @@
RevengeConfirmed, // 재대결 수락 전송 확인 RevengeConfirmed, // 재대결 수락 전송 확인
RevengeRejected, // 재대결 거절 수신 RevengeRejected, // 재대결 거절 수신
RevengeRejectionConfirmed, // 재대결 거절 전송 확인 RevengeRejectionConfirmed, // 재대결 거절 전송 확인
ReceiveTimeout // 상대방이 타임 아웃일 때 ReceiveTimeout, // 상대방이 타임 아웃일 때
OpponentDisconnected
}; };
} }

View File

@ -118,7 +118,14 @@ public partial class GameLogic : IDisposable
break; break;
case Constants.MultiplayManagerState.EndGame: case Constants.MultiplayManagerState.EndGame:
Debug.Log("## End Game"); Debug.Log("## End Game");
// TODO: End Room 처리 ExecuteOnMainThread(() =>
{
GameManager.Instance.panelManager.OpenConfirmPanel("상대방의 연결이 끊어졌습니다.", () =>
{
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Win);
EndGame(Enums.GameResult.Win);
});
});
break; break;
case Constants.MultiplayManagerState.DoSurrender: case Constants.MultiplayManagerState.DoSurrender:
Debug.Log("상대방의 항복 요청 들어옴"); Debug.Log("상대방의 항복 요청 들어옴");
@ -264,6 +271,10 @@ public partial class GameLogic : IDisposable
}); });
}); });
break; break;
case Constants.MultiplayManagerState.OpponentDisconnected:
Debug.Log("상대방 강제 종료");
// 실제로 실행되지 않음. 상대방 강제 종료 시에는 EndGame으로 처리됨
break;
} }
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB"); ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB");
}); });

View File

@ -131,4 +131,10 @@ public class GameManager : Singleton<GameManager>
if (_gameLogic == null) return; if (_gameLogic == null) return;
_gameLogic.RequestDrawChance = false; _gameLogic.RequestDrawChance = false;
} }
private void OnApplicationQuit()
{
Debug.Log("앱 종료 감지: 소켓 연결 정리 중...");
_gameLogic?.Dispose();
}
} }

View File

@ -113,6 +113,8 @@ public class MultiplayManager : IDisposable
_socket.On("revengeConfirmed", RevengeConfirmed); _socket.On("revengeConfirmed", RevengeConfirmed);
_socket.On("revengeRejected", RevengeRejected); _socket.On("revengeRejected", RevengeRejected);
_socket.On("revengeRejectionConfirmed", RevengeRejectionConfirmed); _socket.On("revengeRejectionConfirmed", RevengeRejectionConfirmed);
// 강제 종료 처리
_socket.On("opponentDisconnected", OpponentDisconnected);
_socket.Connect(); _socket.Connect();
} }
@ -212,6 +214,7 @@ public class MultiplayManager : IDisposable
return; return;
} }
Debug.Log("방 나감");
_socket.Emit("leaveRoom", new { roomId = _roomId }); _socket.Emit("leaveRoom", new { roomId = _roomId });
_roomId = null; // 방 나가면 roomId 초기화 _roomId = null; // 방 나가면 roomId 초기화
} }
@ -338,6 +341,13 @@ public class MultiplayManager : IDisposable
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message); _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message);
} }
private void DerawRejectionConfirmed(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message);
}
#endregion #endregion
#region #region
@ -414,6 +424,13 @@ public class MultiplayManager : IDisposable
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRejectionConfirmed, data.message); _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRejectionConfirmed, data.message);
} }
private void OpponentDisconnected(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.OpponentDisconnected, data.message);
}
#endregion #endregion
public void Dispose() public void Dispose()