DO-73 [Feat] 멀티플레이 재대결 세팅

This commit is contained in:
Jay 2025-03-27 17:18:46 +09:00
parent becbb85b06
commit 153876e4df
3 changed files with 146 additions and 3 deletions

View File

@ -25,6 +25,12 @@
DrawConfirmed, DrawConfirmed,
DrawRejected, DrawRejected,
DrawRejectionConfirmed, DrawRejectionConfirmed,
ReceiveRevengeRequest, // 재대결 요청 수신
RevengeRequestSent, // 재대결 요청 전송 확인
RevengeAccepted, // 재대결 수락 수신
RevengeConfirmed, // 재대결 수락 전송 확인
RevengeRejected, // 재대결 거절 수신
RevengeRejectionConfirmed, // 재대결 거절 전송 확인
ReceiveTimeout // 상대방이 타임 아웃일 때 ReceiveTimeout // 상대방이 타임 아웃일 때
}; };
} }

View File

@ -496,7 +496,7 @@ public class GameLogic : IDisposable
Debug.Log("무승부 요청 전송 완료"); Debug.Log("무승부 요청 전송 완료");
break; break;
case Constants.MultiplayManagerState.DrawAccepted: case Constants.MultiplayManagerState.DrawAccepted:
Debug.Log("무승부 요청이 승이 들어옴"); Debug.Log("무승부 요청이 승이 들어옴");
UnityMainThreadDispatcher.Instance().Enqueue(() => UnityMainThreadDispatcher.Instance().Enqueue(() =>
{ {
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw); GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Draw);
@ -504,7 +504,7 @@ public class GameLogic : IDisposable
}); });
break; break;
case Constants.MultiplayManagerState.DrawConfirmed: case Constants.MultiplayManagerState.DrawConfirmed:
Debug.Log("무승부 요청 승 완료"); Debug.Log("무승부 요청 승 완료");
break; break;
case Constants.MultiplayManagerState.DrawRejected: case Constants.MultiplayManagerState.DrawRejected:
Debug.Log("무승부 요청이 거부가 들어옴"); Debug.Log("무승부 요청이 거부가 들어옴");
@ -525,6 +525,35 @@ public class GameLogic : IDisposable
EndGame(Enums.GameResult.Win); EndGame(Enums.GameResult.Win);
}); });
break; break;
case Constants.MultiplayManagerState.RevengeRequestSent:
Debug.Log("재대결 요청 전송 완료");
break;
case Constants.MultiplayManagerState.RevengeAccepted:
Debug.Log("재대결 요청이 승낙이 들어옴");
InitBoardForRevenge();
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
});
break;
case Constants.MultiplayManagerState.RevengeConfirmed:
Debug.Log("재대결 요청 승낙 완료");
InitBoardForRevenge();
break;
case Constants.MultiplayManagerState.RevengeRejected:
Debug.Log("재대결 요청이 거부가 들어옴");
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
GameManager.Instance.panelManager.OpenConfirmPanel("재대결 요청을 거부하였습니다.", () => { });
});
break;
case Constants.MultiplayManagerState.RevengeRejectionConfirmed:
Debug.Log("재대결 요청 거부 완료");
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
GameManager.Instance.panelManager.OpenConfirmPanel("재대결 요청을 거부하였습니다.", () => { });
});
break;
} }
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB"); ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB");
@ -537,6 +566,26 @@ public class GameLogic : IDisposable
} }
} }
private void InitBoardForRevenge()
{
//보드 초기화
_board = new Enums.PlayerType[15, 15];
_totalStoneCounter = 0;
RequestDrawChance = true;
selectedRow = -1;
selectedCol = -1;
// 금수 감지기 초기화
_forbiddenDetector.RenjuForbiddenMove(_board);
_lastRow = -1;
_lastCol = -1;
//timer 초기화
fioTimer.InitTimer();
}
//AI닉네임 랜덤 생성 //AI닉네임 랜덤 생성
private string RandomAINickname() private string RandomAINickname()
{ {

View File

@ -91,12 +91,20 @@ public class MultiplayManager : IDisposable
_socket.On("doSurrender", DoSurrender); _socket.On("doSurrender", DoSurrender);
_socket.On("surrenderConfirmed", SurrenderConfirmed); _socket.On("surrenderConfirmed", SurrenderConfirmed);
_socket.On("receiveTimeout", ReceiveTimeout); _socket.On("receiveTimeout", ReceiveTimeout);
// 무승부 관련
_socket.On("receiveDrawRequest", ReceiveDrawRequest); _socket.On("receiveDrawRequest", ReceiveDrawRequest);
_socket.On("drawRequestSent", DrawRequestSent); _socket.On("drawRequestSent", DrawRequestSent);
_socket.On("drawAccepted", DrawAccepted); _socket.On("drawAccepted", DrawAccepted);
_socket.On("drawConfirmed", DrawConfirmed); _socket.On("drawConfirmed", DrawConfirmed);
_socket.On("drawRejected", DrawRejected); _socket.On("drawRejected", DrawRejected);
_socket.On("drawRejectionConfirmed", DrawRejectionConfirmed); _socket.On("drawRejectionConfirmed", DrawRejectionConfirmed);
// 재대결 관련
_socket.On("receiveRevengeRequest", ReceiveRevengeRequest);
_socket.On("revengeRequestSent", DrawRequestSent);
_socket.On("revengeAccepted", RevengeAccepted);
_socket.On("revengeConfirmed", RevengeConfirmed);
_socket.On("revengeRejected", RevengeRejected);
_socket.On("revengeRejectionConfirmed", RevengeRejectionConfirmed);
_socket.Connect(); _socket.Connect();
} }
@ -249,6 +257,8 @@ public class MultiplayManager : IDisposable
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveTimeout, data.message); _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveTimeout, data.message);
} }
#region
public void RequestDraw() public void RequestDraw()
{ {
if (string.IsNullOrEmpty(_roomId)) if (string.IsNullOrEmpty(_roomId))
@ -321,6 +331,84 @@ public class MultiplayManager : IDisposable
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message); _onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DrawRejectionConfirmed, data.message);
} }
#endregion
#region
public void RequestRevengeRequest()
{
if (string.IsNullOrEmpty(_roomId))
{
Debug.LogError("requestDraw 호출 실패: _roomId가 설정되지 않음");
return;
}
_socket.Emit("requestRevenge",new { roomId = _roomId });
}
private void ReceiveRevengeRequest(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.ReceiveRevengeRequest, data.message);
}
private void RevengeRequestSent(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRequestSent, data.message);
}
public void AcceptRevenge()
{
if (string.IsNullOrEmpty(_roomId))
{
Debug.LogError("acceptRevenge 호출 실패: _roomId가 설정되지 않음");
return;
}
_socket.Emit("acceptRevenge", new { roomId = _roomId });
}
private void RevengeAccepted(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeAccepted, data.message);
}
private void RevengeConfirmed(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeConfirmed, data.message);
}
public void RejectRevenge()
{
if (string.IsNullOrEmpty(_roomId))
{
Debug.LogError("rejectRevenge 호출 실패: _roomId가 설정되지 않음");
return;
}
_socket.Emit("rejectRevenge", new { roomId = _roomId });
}
private void RevengeRejected(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRejected, data.message);
}
private void RevengeRejectionConfirmed(SocketIOResponse response)
{
var data = response.GetValue<MessageData>();
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.RevengeRejectionConfirmed, data.message);
}
#endregion
public void Dispose() public void Dispose()
{ {
if (_socket != null) if (_socket != null)