통신 순서 보장방법에 대한 문의

  • 뒤끝 SDK 버전 : 5.9.4
  • 프로젝트명 : DarkStone

뒤끝 SDK에서 Enqueue로 입력된 명령들은 순서를 보장하는 것으로 알고있지만
제가 컨트롤가능한 어플리케이션 영역에서 한번 체크를 하고자 하는데 올바른 방향인지 검토를 받고자 합니다
(통신 실패에 대한 구현은 예제입니다 미구현을 이해 부탁드립니다)
내용이 난해합니다 ㅠㅠ 혹시 부족한 부분이 있다면 답글주시면 보강하겠습니다

먼저 1입력, 2입력을 연속으로 enqueue 했다고 가정하겠습니다
제가 이해한것으로는 @@@컴퓨터 처리@@@ 순으로 진행되는 것으로 알고 있습니다

질문1)
1입력에 대한 결과가 1-1 / 1-2로 처리 될것이고, 1입력에 대한 if(callback.IsSuccess()) {}를 벗어난 뒤에
2입력을 처리하게 뒤끝 SDK가 되어있는 걸까요?
즉 1-1 혹은 1-2 / 1-2-1을 모두 처리하고 한뒤에 함수를 벗어나야 2입력이 poll되어 처리되는지 순서가 궁금합니다

질문2)
만약 @@@컴퓨터 처리 1-2-1 @@@로 빠져서 비동기 통신을 하게 되면 입력 2에 대한 poll은 비동기 통신이 모두 끝날때까지 기다리게 될까요?

질문3)
하기와 같은 상황에서 tx를 tempTx에 임시 저장하고 수신받았을때 rx값과 비교하였을때 틀리면 순서가 틀려진것으로 검증할려는데 올바른 방향일까요?

//  1 입력
ulong tx=0;
ulong rx=0;

tx++; //값 1로 세팅
ulong tempTx1 = tx; //tempTx에 1 저장
SendQueue.Enqueue(Backend.GameData.TransactionWriteV2,transList,(callback) =>{
rx++; //rx값 1;
ebug.Log($"응답됨 tx:{tempTx} / 현재 rx:{rx}"); //tx 1에대한 rx1확인 
if(callback.IsSuccess()) {
                // @@@컴퓨터 처리 1-1  @@@
                Debug.Log("데이터 업데이트 완료");
            } else {
                // @@@컴퓨터 처리 1-2  @@@
                Debug.Log(callback.GetMessage());
                  // @@@컴퓨터 처리 1-2-1  @@@
                  //통신이 불안정합니다 로딩창...
                  for(int i=0;i<3;i++){
                       //질문2) 여기서 동기통신을 할 경우 2입력을 poll하지 않고 동기통신이 모두 끝날때까지 기다리는것인지...
                       var bro = Backend.GameData.TransactionWriteV2(transList);
                       if(bro.IsSuccess())break;
                  }
            }
        }); //질문1)여기를 벗어나야 2입력이 poll되어 송신 되는것인지...

// 2 입력

tx++; //값 2로 세팅
ulong tempTx2 = tx; //tempTx에 2 저장
SendQueue.Enqueue(Backend.GameData.TransactionWriteV2,transList,(callback) =>{
rx++; //rx값 2;
ebug.Log($"응답됨 tx:{tempTx} / 현재 rx:{rx}"); //tx 2에대한 rx2확인 
//만약 tempTx값이 2이고 rx가 3이라면 다른 rx가 먼저 들어왔으니 오류라고 판단 
if(callback.IsSuccess()) {
                // @@@컴퓨터 처리 2-1  @@@
                Debug.Log("데이터 업데이트 완료");
            } else {
                // @@@컴퓨터 처리 2-2  @@@
                Debug.Log(callback.GetMessage());
                  // @@@컴퓨터 처리 2-2-1  @@@
                  //통신이 불안정합니다 로딩창...
                  for(int i=0;i<3;i++){
                       var bro = Backend.GameData.TransactionWriteV2(transList);
                       if(bro.IsSuccess())break;
                  }
            }
        });

안녕하세요 개발자님,
남겨주신 문의사항과 코드를 확인하였을 때, 해당 방식으로 변수에 따라 비교하는 것은 명확하지 않을 수 있습니다.

SendQueue는 한 프레임안에 Insert, Get을 호출한다면 Insert를 호출하고 Insert가 완료될때까지 응답을 기다리다가, 응답이 온 이후에 Get을 호출하는 로직입니다.

헌데 남겨주신 로직에서는
첫번째 SendQueue,
그 다음에 선언한 SendQueue,
첫번째 SendQueue안에 for문으로 호출하는 SendQueue 순서대로 호출이 이루어집니다.

SendQueue에 행동을 Enqueue하고 종료가 되는데
이때 함수에서 생성된 지역변수는 두번째 함수가 호출될 때 복사가 되었는지, 참조가 되었는지 확인을 해야하는 문제가 있을 수도 있기에 이를 꼭 확인하여 주시면 감사하겠습니다.