AsyncPoll 함수 호출 에러

안녕하세요. SDK 5.4.0 으로 업데이트 하고 문제가 발생했습니다.
Initialize 함수 인자로 true 를 넣어준뒤,
Game Entity (MonoBehavior 상속받음) 스크립트의 Update 함수에 AnsycPoll을 호출하게 했습니다.
초기화성공 직후에 에러를 리턴합니다.


오류1

아래는 로그인 루틴입니다.


ServerConnection 클래스는 함수를 인자로받아 해당 비동기함수가 완료될때까지 기다립니다.
따라서, 하나의 작업이 끝나면 다음 작업이 시작됨을 보장합니다. (여러 비동기가 동시에 진행되지 않음)

서버에 요청하는 순차적인 작업은 다음과 같습니다.

  1. 초기화및 버전체크, 토큰확인 ( 성공 )
  2. 로그인
  3. 게이머 정보 가져오기
  4. 차트 가져오기
  5. 유저 정보 가져오기
  6. 랭킹 차트 가져오기

3번에서 에러가뜨면서 게임이 멈추는데,
첫 번째 이상한점은 게임정보는 정상적으로 읽어와 집니다.
(Poll 함수를 실행하면서 비동기 처리를 한 후에 에러를 뱉는것 같습니다.)
두 번째 이상한점은 3번로직을 제거하면 이상하게 2번에서 에러가뜹니다.

혹시 Poll 이 진행되고나서 따로 처리해주어야하는게 있나요?
로그인 루틴을 진행하는 클래스는 Mono를 상속하지 않습니다.

SDK 업데이트 이전에는 몇주간 테스트해도 로그인 오류가 없었는데, 이번에 Ansyc 과 Poll 함수를 추가하면서 계속 에러를뻗습니다.
콘솔에 스택추적로그도 안떠서 정확히 뭐가문제인지도 모르겠습니다.

밤새 원인을 찾지 못해서 SendQueue를 이용해 로그인 로직을 수정했습니다.
SendQueueMng 스크립트를 오브젝트에 부착하고 로직을 실행하는데
이번에는 메인쓰레드에서 실행되지 않는다고 오류가 나네요.
init1


모든 서버 로직이 정상적으로 진행되고, Loading UI 를 제어하는 순간 메인쓰레드가 아니라서 오브젝트를 건드릴 수 없다고 에러를 냅니다.

thread

  1. Mono Behavior 를 상속받은 Entity에서 Update 에서 바로 뒤끝서버를 초기화했습니다. ( Main Thread )
  2. 초기화 이후 SendQueue 로 실행되는 로직들은 SendQueueMng.Update 를 통해서 Poll됩니다 ( Main Thread )

어떤 부분에서 Main Thread 가 아닌건지 잘 모르겠습니다.

추가로 질문하나만 더 드리겠습니다.
이전에 제가 같은 질문을 드렸었는데 비동기관련 함수들이 여러번 바뀌어서 다시 질문드립니다.
여러 로직들을 Queue에 넣어서 순차적 실행한다고할때, 중간에 실패한경우 로그아웃 시키고 Queue 에있는 모든 작업을 버리고 싶습니다.
Sendqueue.Stop() 을 실행해서 모든 작업을 버려야하나요?
그러면 Stop 이후에 다시 Start 를 꼭 해주어야 하는지 궁금합니다.

안녕하세요 개발자님

순서대로 답변드리겠습니다.

우선

AsyncPoll을 호출하실 때 다음과 같이 코드를 바꾸어 보시겠나요?

if(Backend.IsInitialized == true)
{
    Backend.AysncPoll();
}

공유해주신 로그인 코드상에서는 뒤끝 서버로 요청을 보이는 함수는 보이지 않아

상세한 답변을 드리기 어려운 것 같습니다.

공유해주신 로직 상으로는 문제가 없어 보입니다.

또한 AsyncPoll을 이용 할 때는 초기화 시 useAsyncPoll 인자를 true로 주는 것 이외에는 별도로 처리하실 것이 없습니다.

두번째로 공유해주신 SendQueue 로직 상에서는

유니티의 객체에 접근하는 부분이 어디인지 잘 모르겠는데요,
(로딩 객체에 접근한다고 하셨는데, 공유해주신 로직 상에서는 WarningWindow.Open 밖에 보이지 않는 것 같습니다.)

공유해주신 로직 자체는 올바른 것 같습니다.

에러가 발생하는 로직을 공유해주시면 좀 더 상세히 답변드릴 수 있을 것 같습니다.

공개 채널에 공유가 꺼려지시면 DM 부탁드리겠습니다.

마지막으로

SendQueue를 Stop 후 Start를 다시한 경우 Queue에 있는 모든 작업이 초기화 되게 됩니다.
(메모리 재할당 작업이 발생)

Stop 이후 Start는 꼭 해주셔야 합니다.

참고부탁드리겠습니다.

감사합니다.

안녕하세요.
fix
말씀해주신 것 처럼 수정해도 같은 오류가 일어납니다.

SendQueue 의 경우는 해결했습니다.
Login 과정에서 함수하나가 SendQueue 가 아닌 비동기로 실행 되고있었습니다… ㅠ ㅠ

그리고 또한가지 오류(?) 를 발견했는데
Backend.Initialize 를 아래와 같이 SendQueue로 실행하면 Main Thread 오류가 생기는것 같습니다.
수정 전

이렇게 Initialize만 동기로 실행하면 이후에 실행하는 SendQueue 작업들도 정상적으로 실행됩니다.
수정

SendQueue 를 사용하기로 했습니다.

안녕하세요 개발자님

AsyncPoll 을 사용하실 때

Backend.Initialize(true)
혹은
Backend.InitializeAsync(true, callback=>{})

과 같은 형태로 초기화를 시도하셨는지 확인부탁드리겠습니다.

또한

초기화 함수의 경우에는 SendQueue를 지원하고 있지 않습니다.

참고 부탁드리겠습니다.

감사합니다.

안녕하세요. 저도 동일한 현상을 겪었는데 저같은경우 우편함 작업 도중
비동기 콜백 내부에서
postItem.nickname = postListJson[i][“nickname”].ToString();
부분에
postListJson[i][“nickname”] 과 같은 객체가 null이라서 에러 발생했었습니다.