랜덤매치 매치메이킹을 할 때, 다음과 같은 오류가 발생하며 무한로딩에 걸려, 게임 Scene으로 넘어가지 않습니다.
일단 게임은 일대일로 샌드박스 모드로만 잡히게 해 둔 상황이고,
해당 버그는 한 번 같은 조건으로 랜덤게임을 진행한 뒤, 로비로 돌아와서 다시 매치메이킹을 신청할 경우 발생하는 것 같습니다.
어떻게 하면 해결할 수 있나요???
랜덤매치 매치메이킹을 할 때, 다음과 같은 오류가 발생하며 무한로딩에 걸려, 게임 Scene으로 넘어가지 않습니다.
일단 게임은 일대일로 샌드박스 모드로만 잡히게 해 둔 상황이고,
해당 버그는 한 번 같은 조건으로 랜덤게임을 진행한 뒤, 로비로 돌아와서 다시 매치메이킹을 신청할 경우 발생하는 것 같습니다.
어떻게 하면 해결할 수 있나요???
안녕하세요 개발자님.
InvalidOperation: You have already joined the room이 발생하였을 경우,
LeaveMatchMakingServer 함수를 호출하여 접속을 종료한 뒤에 다시 매칭서버에 접속하여 이용하시면 해결이 가능합니다.
또한 매칭 서버와의 세션이 끊어졌을 경우 해당 에러가 발생할 수 있습니다.
핸들러 OnMatchInGameStart가 호출된 이후,
아래 LeaveMatchMakingServer() 함수를 호출하여 이전까지 사용했던 매칭을 잡아주는 매칭서버와의 연결을 종료해여야 인게임에 매치가 종료된 이후에도 다시 매치를 잡을 때 오류의 발생을 막을 수있습니다.
뒤끝매치 예제게임은 위와 같은 로직으로 인게임 서버 접속후에 명시적으로 매칭서버와의 연결을 종료하였으며 이부분은 BackEndMatchManager.cs - SetHostSession() 함수에서 확인할 수 있으니 참고부탁드립니다.
감사합니다.
LeaveMatchMakingServer()를 호출하였더니 InvalidOperation: You have already joined the room 에 관해서는 더이상 발생하지 않는 것 같습니다.
다만, System.Exception: TCP Client is working.
이 오류는 계속해서 뜨는 것 같네요 ㅠㅜㅠ 이 오류에 대해 조금 더 정확히 알려주시면 감사하겠습니다.
또한, 예제게임에서 BackEndMatchManager.cs - SetHostSession() 함수를 확인하였는데,
해당 함수 내용은
hostSession = host;
이 한 줄이 다 인 것 같습니다… 이 문제하고는 직접적인 연관이 없어보이는 것 같은데, 제가 이해를 제대로 못하고 있는 건가요?? ㅠㅜ
그리고, 기묘하게도 해당 오류가 샌드박스모드에서만 발생하는 것도 이유를 모르겠네요… 실제 플레이어하고 매칭이 되었을 경우에는 게임을 나간 뒤 다음 게임 매칭을 신청해도 잘 들어가지더군요 ㅠㅜ
잘 부탁드리겠습니다.
SetHostSeesion의 경우 아래와 같이 설정이 끝난 이후에는 LeaveMatchServer 함수를 호출하여 매치서버에서 퇴장합니다.
private bool SetHostSession()
{
// 호스트 세션 정하기
// 각 클라이언트가 모두 수행 (호스트 세션 정하는 로직은 모두 같으므로 각각의 클라이언트가 모두 로직을 수행하지만 결과값은 같다.)
Debug.Log("호스트 세션 설정 진입");
// 호스트 세션 정렬 (각 클라이언트마다 입장 순서가 다를 수 있기 때문에 정렬)
sessionIdList.Sort();
isHost = false;
// 내가 호스트 세션인지
foreach (var record in gameRecords)
{
if (record.Value.m_isSuperGamer == true)
{
if (record.Value.m_sessionId.Equals(Backend.Match.GetMySessionId()))
{
isHost = true;
}
hostSession = record.Value.m_sessionId;
break;
}
}
Debug.Log("호스트 여부 : " + isHost);
// 호스트 세션이면 로컬에서 처리하는 패킷이 있으므로 로컬 큐를 생성해준다
if (isHost)
{
localQueue = new Queue<KeyMessage>();
}
else
{
localQueue = null;
}
// 호스트 설정까지 끝나면 매치서버와 접속 끊음
LeaveMatchServer(); // <- 해당부분
return true;
}
이처럼 게임이 시작되기 이전에 LeaveMatchMakingServer() 함수를 호출해주시면 될 것 같습니다.
System.Exception: TCP Client is working은 이미 매치서버에 연결이 되어있음에도 JoinMatchMakingServer함수를 호출했을 경우에 발생하는 오류로,
OnJoinMatchMakingServer(서버 접속) 핸들러 호출 이후에 OnLeaveMatchMakingServer(서버 퇴장)이 호출되지 않고 해당 핸들러가 한번 더 호출되는 적이 있는지 확인해주시면 될 것 같습니다.