안녕하세요 개발자님.
1번 코드의 경우, 뒤끝 채널 접속 중 내부에서 발생하는 에러(JoinChannel 시도시에 out ErrorInfo에서 error가 발생할 경우 접속되지 않습니다)에는 재접속이 되지 않을 것으로 예상됩니다.
해당 부분에도 재접속 하도록 로직을 추가해주심 될 것 같습니다.
2번 코드의 경우, 접속 시도중인 직후 나 에러가 발생하여 접속이 종료되는 도중에는 정상적으로 작동하지 않을 수 있습니다. 확실히 구분하고자 할 경우에는 직접 bool값을 이용하여 OnLeaveChannel 시에는 false를 주고, OnJoinChannel에는 true를 주어 직접 확인하는 로직을 추가하여 사용해주심 될 것 같습니다.
추가적으로 챗의 경우 동기코드로 되어있는데, 동기 코드는 호출 시 응답까지 잠시 멈출 수 있으므로 SendQueue의 비동기 형식으로 이용하는 것을 추천드립니다.
아래 코드 참고하여 로직 추가해주시면 감사하겠습니다.
int tryJoinCount = 0;
bool isPublicChatConnect = false;
Backend.Chat.OnLeaveChannel = () =>
{
if(args.ErrInfo != ErrorInfo.Success)
{
if(!args.Session.IsRemote)
{
isPublicChatConnect = false;
if(tryJoinCount < 3) // 반복되는 에러로 인해 버벅거림이 발생할 수 있으므로3번까지 시도
{
// 기존 재접속 코드
}
}
}
}
Backend.Chat.OnJoinChannel= () =>
{
if(args.ErrInfo == ErrorInfo.Success)
{
if(!args.Session.IsRemote) // 내가 접속할 경우
{
tryJoinCount = 0; // 접속이 되었으니 초기화
isPublicChatConnect = true;
}
}
}
void SearchChannel()
{
SendQueue.Enqueue(Backend.Chat.GetGroupChannelList, ChannelName, bro => { // 동기로 할 경우, 버벅거림 현상을 느낄 수 있음
if(bro.IsSuccess())
{
//이하 if(bro.IsSuccess) 로직
tryJoinCount++;
ErrorInfo errorInfo;
Backend.Chat.JoinChannel(--, errorInfo);
if (info != ErrorInfo.Success)
{
Backend.Chat.ResetConnect(); // 해당 함수 요청시 OnLeaveChannel에 이벤트 발생(에러로 인해 재접속 시도)
Debug.Log(info);
}
}
});
}
2번
if(isPublicChatConnect && is_WeaponChange == true)