Game > GameAnvil > Unity 기초 개발 가이드 > User Controller

GameAnvilUser

는 GameAnvil 서버의 GameNode와 관련된 작업을 담당합니다. 로그인(Login()), 로그아웃(Logout()) 및 방 관리 등 기본 기능을 제공하며, 직접 정의한 프로토콜을 기반으로 클라이언트는 자신의 유저 객체를 통해 다른 객체들과 메시지를 주고 받으며 여러 가지 콘텐츠를 구현할 수 있습니다.

GameAnvilManager는 기본적으로 간편 로그인 과정에서 생성된 하나의 GameAnvilUser를 관리하는 GameAnvilUserController를 제공합니다. LoginResult의 UserController를 통해서 얻을 수 있습니다.

로그인

로그인은 클라언트가 서버에 접속한 후 GameNode에 자신의 유저 객체를 만드는 과정이라고 정의할 수 있습니다.

로그인은 간편 로그인에서 한 번에 처리되기 때문에 설명을 생략합니다. 자세한 내용은 Unity 심화 개발 가이드 > UserAgent를 참고하십시오.

로그아웃

GameAnvilManager에서는 게임 서버에서 로그아웃하고, 자동으로 접속 종료까지 처리됩니다. 로그아웃에 대한 더 자세한 설명은 Unity 심화 개발 가이드 > UserAgent를 참고하십시오.

방 생성, 입장, 퇴장

2명 이상의 유저는 방을 통해 동기화된 메시지 흐름을 만들 수 있습니다. 즉, 유저들의 요청은 방 안에서 모두 순서가 보장됩니다. 물론 1명의 유저를 위한 방 생성도 콘텐츠에 따라서 의미를 가질 수도 있습니다. 방을 어떻게 사용할지는 어디까지나 엔진 사용자의 몫입니다.

CreateRoom

CreateRoom()을 호출하여 방을 생성하고 그 방으로 입장합니다.

public async void ManagerCreateRoom()
{
    GameAnvilManager gameAnvilManager = GameAnvilManager.Instance;
    GameAnvilUserController userControll = gameAnvilManager.UserController;

    try
    {
        Payload createRoomPayload = new Payload(new Protocol.CreateRoomData());
        ErrorResult<ResultCodeCreateRoom, CreatedRoomResult> result = await userControll.CreateRoom("RoomName", "RoomType", "MatchingGroup", createRoomPayload);
        if (result.ErrorCode == ResultCodeCreateRoom.CREATE_ROOM_SUCCESS)
        {
            // 성공
        } else
        {
            // 실패
        }
    }
    catch(Exception e)
    {
        // 예외
    }
}

CreateRoom()은 다음과 같은 4개의 매개변수를 가지고 있습니다.

타입 이름 설명
String roomName 생성할 방의 이름. 사용하지 않는 경우 string.Empty(빈 문자열) 입력
String roomType 생성할 방의 타입. 서버에 등록된 방 타입 입력
String matchingGroup 매칭 시 사용할 매칭 그룹 이름. 사용하지 않는 경우 string.Empty(빈 문자열) 입력
Payload payload 방 생성 요청을 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null)

응답으로 ErrorResult를 리턴하며, ErrorCode 필드를 값을 확인하여 성공 여부를 확인할 수 있습니다. CreateRoom이 성공하면 ErrorCode 필드의 값이 ResultCodeCreateRoom.CREATE_ROOM_SUCCESS 가 되며, 아닌 경우 방 생성이 실패한 것입니다. Data 필드를 통해 요청 결과 CreatedRoomResult 를 얻을 수 있습니다. 이를 통해 생성된 방의 정보를 얻을 수 있으며, 서버 구현에 따라서 추가 정보를 얻을 수도 있습니다.

ResultCodeCreateRoom의 상세 내용은 다음과 같습니다.

이름 설명
PARSE_ERROR -2 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음.
TIMEOUT -1 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음.
SYSTEM_ERROR 1 서버 시스템 에러. 서버의 알수 없는 오류로 실패
INVALID_PROTOCOL 2 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨.
CREATE_ROOM_SUCCESS 0 성공
CREATE_ROOM_FAIL_CONTENT 601 실패. 사용자 코드에서 거부됨
CREATE_ROOM_FAIL_ALREADY_JOINED_ROOM 602 실패. 이미 방에 들어가 있음
CREATE_ROOM_FAIL_CREATE_ROOM_ID 603 실패. 방 아이디 생성이 실패하였을 경우
CREATE_ROOM_FAIL_CREATE_ROOM 604 실패. 방 생성 실패

CreatedRoomResult의 상세 내용은 다음과 같습니다.

타입 이름 설명
int RoomId 생성한 방의 아이디
String? RoomName 생성한 방의 이름
Payload payload 클라이언트에서 필요한 추가 정보

JoinRoom

JoinRoom()을 호출하여 이미 생성된 방에 입장합니다.

GameAnvilManager gameAnvilManager = GameAnvilManager.Instance;
GameAnvilUserController userControll = gameAnvilManager.UserController;
try
{
    Payload joinRoomPayload = new Payload(new Protocol.CreateRoomData());
    ErrorResult<ResultCodeJoinRoom, JoinRoomResult> result = await userControll.JoinRoom(managerRoomType, managerRoomId, string.Empty, joinRoomPayload);
    if(result.ErrorCode == ResultCodeJoinRoom.JOIN_ROOM_SUCCESS)
    {
        // 성공
    } else
    {
        // 실패
    }
}
catch (Exception e)
{
    // 예외
}

JoinRoom()은 다음과 같은 4개의 매개변수를 가지고 있습니다.

타입 이름 설명
String roomType 입장할 방의 타입.
int roomId 입장할 방의 아이디.
String matchingUserCategory 입장할 방에서 사용할 matchingUserCategory. 사용하지 않는 경우 string.Empty(빈 문자열) 입력
각 방에서는 방에 속한 유저를 카테고리로 나누고, 각 카테고리별로 인원수 제한을 적용할 수 있다. 지정한 matchingUserCategory의 현재 인원이 최대인 경우 JoinRoom 이 실패할 수 있다.
Payload payload 방 입장 요청을 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null)

응답으로 ErrorResult를 리턴하며, ErrorCode 필드를 값을 확인하여 성공 여부를 확인할 수 있습니다. JoinRoom이 성공하면 ErrorCode 필드의 값이 ResultCodeJoinRoom.JOIN_ROOM_SUCCESS 가 되며, 아닌 경우 방 생성이 실패한 것입니다. Data 필드를 통해 요청 결과 JoinRoomResult 를 얻을 수 있습니다. 이를 통해 입장한 방의 정보를 얻을 수 있으며, 서버 구현에 따라서 추가 정보를 얻을 수도 있습니다.

ResultCodeJoinRoom 상세 내용은 다음과 같습니다.

이름 설명
PARSE_ERROR -2 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음.
TIMEOUT -1 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음.
SYSTEM_ERROR 1 서버 시스템 에러. 서버의 알수 없는 오류로 실패.
INVALID_PROTOCOL 2 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨.
JOIN_ROOM_SUCCESS 0 성공.
JOIN_ROOM_FAIL_CONTENT 701 실패. 사용자 코드에서 거부됨.
JOIN_ROOM_FAIL_ROOM_DOES_NOT_EXIST 702 실패. 입장 요청한 방이 존재하지 않음.
JOIN_ROOM_FAIL_ALREADY_JOINED_ROOM 703 실패. 이미 방에 들어가 있음.
JOIN_ROOM_FAIL_ALREADY_FULL 704 실패. 입장 요청한 방이 꽉 차있음.
JOIN_ROOM_FAIL_ROOM_MATCH 705 실패. 룸매치 메이킹에서 문제가 발생함.

JoinRoomResult의 상세 내용은 다음과 같습니다.

타입 이름 설명
int RoomId 입장한 방의 아이디.
String? RoomName 입장한 방의 이름.
Payload payload 클라이언트에서 필요한 추가 정보.

LeaveRoom

LeaveRoom()을 호출하여 입장한 방에서 퇴장할 수 있습니다.

public async void ManagerLeaveRoom()
{
    GameAnvilManager gameAnvilManager = GameAnvilManager.Instance;
    GameAnvilUserController userControll = gameAnvilManager.UserController;
    try
    {
        Payload leaveRoomPayload = new Payload(new Protocol.LeaveRoomData());
        ErrorResult<ResultCodeLeaveRoom, Payload> result = await userControll.LeaveRoom(leaveRoomPayload);
        if (result.ErrorCode == ResultCodeLeaveRoom.LEAVE_ROOM_SUCCESS)
        {
            // 성공
        } else
        {
            // 실패
        }
    }
    catch (Exception e)
    {
        // 예외
    }
}

LeaveRoom()은 다음과 같은 1개의 매개변수를 가지고 있습니다.

타입 이름 설명
Payload payload 방 퇴장 요청을 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null)

응답으로 ErrorResult를 리턴하며, ErrorCode 필드를 값을 확인하여 성공 여부를 확인할 수 있습니다. JoinRoom이 성공하면 ErrorCode 필드의 값이 ResultCodeLeaveRoom.LEAVE_ROOM_SUCCESS 가 되며, 아닌 경우 방 생성이 실패한 것입니다. 서버 구현에 따라서 Data 필드의 Payload 를 통해 추가 정보를 얻을 수도 있습니다.

ResultCodeLeaveRoom 상세 내용은 다음과 같습니다.

이름 설명
PARSE_ERROR -2 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음.
TIMEOUT -1 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음.
SYSTEM_ERROR 1 서버 시스템 에러. 서버의 알수 없는 오류로 실패.
INVALID_PROTOCOL 2 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨.
LEAVE_ROOM_SUCCESS 0 성공.
LEAVE_ROOM_FAIL_CONTENT 801 실패. 사용자 코드에서 거부됨.

NamedRoom

NamedRoom()을 호출하여 지정한 이름의 방에 입장할 수 있습니다. 지정한 이름의 방이 없을 경우에는 방을 생성한 후 그 방으로 입장합니다.

public async void ManagerNamedRoom()
{
    GameAnvilManager gameAnvilManager = GameAnvilManager.Instance;
    GameAnvilUserController userControll = gameAnvilManager.UserController;

    try
    {
        bool isParty = false;
        Payload namedRoomPayload = new Payload(new Protocol.NamedRoomData());
        ErrorResult<ResultCodeNamedRoom, NamedRoomResult> result = await userControll.NamedRoom("RoomName", "RoomType", isParty, namedRoomPayload);
        if (result.ErrorCode == ResultCodeNamedRoom.NAMED_ROOM_SUCCESS)
        {
            // 성공
        } else
        {
            // 실패
        }
    } catch (Exception e)
    {
        // 예외
    }
}

NamedRoom()은 다음과 같은 4개의 매개변수를 가지고 있습니다.

타입 이름 설명
String roomType 입장 또는 생성 할 방의 타입
String roomName 입장 또는 생성 할 방의 이름
bool isParty 파티 매치메이킹을 위한 방 여부.
같은 파티로 묶인 유저들이 파티 매치메치킹이 완료될 때 까지 함께 대기하기 위한 방을 만들 경우 true로 입력한다.
Payload payload 입장 또는 생성 요청을 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null)

응답으로 ErrorResult를 리턴하며, ErrorCode 필드를 값을 확인하여 성공 여부를 확인할 수 있습니다. NamedRoom이 성공하면 ErrorCode 필드의 값이 ResultCodeNamedRoom.NAMED_ROOM_SUCCESS 가 되며, 아닌 경우 입장 또는 생성이 실패한 것입니다. Data 필드를 통해 요청 결과 NamedRoomResult 를 얻을 수 있습니다. 이를 통해 입장 또는 생성한 방의 정보를 얻을 수 있으며, 서버 구현에 따라서 추가 정보를 얻을 수도 있습니다.

ResultCodeNamedRoom 상세 내용은 다음과 같습니다.

이름 설명
PARSE_ERROR -2 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음.
TIMEOUT -1 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음.
SYSTEM_ERROR 1 서버 시스템 에러. 서버의 알수 없는 오류로 실패
INVALID_PROTOCOL 2 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨.
NAMED_ROOM_SUCCESS 0 성공
NAMED_ROOM_FAIL_CONTENT 701 실패. 사용자 코드에서 거부됨
NAMED_ROOM_FAIL_ROOM_DOES_NOT_EXIST 702 실패. 방이 존재하지 않음.
방 입장 처리 중, 방에 있는 모든 유저가 방에서 나가는 경우 발생할 수 있다.
NAMED_ROOM_FAIL_ALREADY_JOINED_ROOM 703 실패. 이미 방에 들어가 있음
NAMED_ROOM_FAIL_INVALID_ROOM_NAME 704 실패. 잘못된 방 이름을 요청함.
NAMED_ROOM_FAIL_CREATE_ROOM 705 실패. 방 생성에 실패함.

NamedRoomResult 의 상세 내용은 다음과 같습니다.

타입 이름 설명
bool Created 새로운 방이 생성되었는지 여부
int RoomId 입장한 방의 아이디
String? RoomName 입장한 방의 이름
Payload payload 클라이언트에서 필요한 추가 정보.

매치 메이킹

GameAnvil은 크게 두 가지 매치 메이킹을 제공합니다. 하나는 방 단위의 매칭을 수행하는 룸 매치 메이킹이고, 다른 하나는 유저 단위의 매칭을 수행하는 유저 매치 메이킹입니다.

룸 매치 메이킹

룸 매치 메이킹은 조건에 맞는 방으로 유저를 입장시켜 주는 방식입니다. 룸 매치 메이킹 요청 시 조건에 맞는 방이 있으면 해당 방으로 바로 입장시켜 주고 조건에 맞는 방이 없다면 새로운 방을 생성하여 입장시켜 줍니다.

MatchRoom()을 호출하여 룸 매치 메이킹을 요청할 수 있습니다.

public async void ManagerMatchRoom()
{
    GameAnvilManager gameAnvilManager = GameAnvilManager.Instance;
    GameAnvilUserController userControll = gameAnvilManager.UserController;
    try
    {
        var matchRoomPayload = new Payload(new Protocol.MatchRoomData());
        ErrorResult<ResultCodeMatchRoom, MatchResult> result = await userControll.MatchRoom(false, false, managerRoomType, ConstantManager.channelId, string.Empty, matchRoomPayload);
        if (result.ErrorCode == ResultCodeMatchRoom.MATCH_ROOM_SUCCESS)
        {
            // 성공
        } else
        {
            // 실패
        }
    }
    catch (Exception e)
    {
        // 예외
    }
}

MatchRoom()은 다음과 같은 7개의 매개변수를 가지고 있습니다.

타입 이름 설명
bool isCreateRoomIfNotJoinRoom 조건에 맞는 방을 찾지 못했을 때, 방을 생성하여 입장할지 여부.
true : 방이 없으면 생성한다.
false : 방이 없으면 실패 처리한다.
bool isMoveRoomIfJoinedRoom 이미 방에 입장한 상태인 경우, 다른 방으로 이동할지 여부.
true : 방에 입장된 상태이면 방을 옮긴다.
false : 방에 입장된 상태로 매칭을 요청한다면 실패 처리한다.
string roomType 방 타입. 같은 타입의 방을 찾는다.
string matchingGroup 매칭 그룹. 같은 그룹으로 생성된 방을 찾는다.
string matchingUserCategory 매칭 된 방에서 사용항 유저 카테고리.
각 방에서는 방에 속한 유저를 카테고리로 나누고, 각 카테고리별로 인원수 제한을 적용할 수 있다. 지정한 matchingUserCategory의 현재 인원이 최대가 아닌 방을 찾는다.
Payload payload 매치 메이킹 요청을 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null)
Payload leaveRoomPayload 다른 방으로 이동하는 경우, 방을 나갈때 처리할 서버의 사용자 코드에서 필요한 추가 정보. (default = null)

응답으로 ErrorResult를 리턴하며, ErrorCode 필드를 값을 확인하여 성공 여부를 확인할 수 있습니다. MatchRoom이 성공하면 ErrorCode 필드의 값이 ResultCodeMatchRoom.NAMED_ROOM_SUCCESS 가 되며, 아닌 경우 입장 또는 생성이 실패한 것입니다. Data 필드를 통해 요청 결과 MatchResult 를 얻을 수 있습니다. 이를 통해 입장 또는 생성한 방의 정보를 얻을 수 있으며, 서버 구현에 따라서 추가 정보를 얻을 수도 있습니다.

ResultCodeMatchRoom 상세 내용은 다음과 같습니다.

이름 설명
PARSE_ERROR -2 패킷 파싱 에러. 서버와 클라이언트의 버전이 다를 경우 발생할 수 있음.
TIMEOUT -1 타임 아웃. 요청에 대한 응답이 정해진 시간내에 오지 않음.
SYSTEM_ERROR 1 서버 시스템 에러. 서버의 알수 없는 오류로 실패
INVALID_PROTOCOL 2 서버에 등록되지 않은 프로토콜. 추가정보에 등록되지 않은 프로토콜이 사용됨.
NAMED_ROOM_SUCCESS 0 성공
NAMED_ROOM_FAIL_CONTENT 701 실패. 사용자 코드에서 거부됨
NAMED_ROOM_FAIL_ROOM_DOES_NOT_EXIST 702 실패. 방 입장 처리 중, 방이 사라짐.
NAMED_ROOM_FAIL_ALREADY_JOINED_ROOM 703 실패. 이미 방에 들어가 있음
NAMED_ROOM_FAIL_INVALID_ROOM_NAME 704 실패. 잘못된 방 이름을 요청함.
NAMED_ROOM_FAIL_CREATE_ROOM 705 실패. 방 생성에 실패함.
MATCH_ROOM_SUCCESS 0 성공
MATCH_ROOM_FAIL_CONTENT 901 실패. 사용자 코드에서 거부됨
MATCH_ROOM_FAIL_ROOM_DOES_NOT_EXIST 902 실패. 방이 존재하지 않음.
MATCH_ROOM_FAIL_ALREADY_JOINED_ROOM 903 실패. 이미 방에 들어가 있음
MATCH_ROOM_FAIL_LEAVE_ROOM 904 실패. 다른 방으로 이동할 때, 기존방에서 나가기가 실패한 경우
MATCH_ROOM_FAIL_IN_PROGRESS 905 실패. 이미 매치 매이킹이 진행중인 경우
MATCH_ROOM_FAIL_MATCHED_ROOM_DOES_NOT_EXIST 906 실패. 조건에 맞는 방을 찾아 방에 참가 시키는 도중, 방이 사라짐
방 입장 처리 중, 방에 있는 모든 유저가 방에서 나가는 경우 발생할 수 있다.
MATCH_ROOM_FAIL_CREATE_FAILED_ROOM_ID 907 실패. 방 아이디 생성이 실패하였을 경우
MATCH_ROOM_FAIL_CREATE_FAILED_ROOM 908 실패. 방 생성이 실패하였을 경우
MATCH_ROOM_FAIL_INVALID_ROOM_ID 909 실패. 잘못된 룸아이디가 사용되었을 경우
MATCH_ROOM_FAIL_INVALID_NODE_ID 910 실패. 잘못된 노드아이디가 사용되었을 경우
MATCH_ROOM_FAIL_INVALID_USER_ID 911 실패. 잘못된 유저아이디가 사용되었을 경우
MATCH_ROOM_FAIL_MATCHED_ROOM_NOT_FOUND 912 실패. 매칭을 진행하였으나, 방을 찾지 못한 경우
MATCH_ROOM_FAIL_INVALID_MATCHING_USER_CATEGORY 913 실패. 잘못된 매칭 유저 카테고리를 사용하였을 경우
MATCH_ROOM_FAIL_MATCHING_USER_CATEGORY_EMPTY 914 실패. 매칭룸에서 유저 카테고리 사이즈가 0일 경우
MATCH_ROOM_FAIL_BASE_ROOM_MATCH_FORM_NULL 915 실패. 매칭 신청서가 NULL 일 경우
MATCH_ROOM_FAIL_BASE_ROOM_MATCH_INFO_NULL 916 실패. 매칭 정보가 NULL 일 경우

MatchResult 의 상세 내용은 다음과 같습니다.

타입 이름 설명
bool IsCancel 요청이 취소되었는지 여부.
int RoomId 입장한 방의 아이디.
bool Created 새로운 방이 생성되었는지 여부.
String RoomName 입장한 방의 이름.
Payload? payload 클라이언트에서 필요한 추가 정보.

유저 매치 메이킹

유저 매치 메이킹은 유저 풀을 만들고 그 안에서 조건에 맞는 유저들을 찾아 새로 생성한 방으로 입장시켜 주는 방식입니다. 유저 풀에 조건에 맞는 유저의 수가 모자랄 경우 매치 메이킹이 완료될 때까지 시간이 걸릴 수 있고, 시간 내에 매치 메이킹이 완료되지 않으면 시간 초과되어 매칭이 실패 할 수 있습니다.

MatchUserStart()를 호출하여 유저 매치 메이킹을 시작할 수 있습니다. 이미 방에 입장한 경우 등 서버의 조건에 따라 요청이 실패할 수 있습니다.

public async void ManagerMatchUserStart()
{
    GameAnvilManager gameAnvilManager = GameAnvilManager.Instance;
    GameAnvilUserController userControll = gameAnvilManager.UserController;
    userControll.onMatchUserDoneSuccess.AddListener((MatchResult matchResult) => {
        // 매칭 성공
    });
    userControll.onMatchUserTimeOut.AddListener((MatchResult matchResult) =>
    {
        // 매칭 실패
    });
    try
    {
        ErrorResult<ResultCodeMatchUserStart, Payload> result = await gameAnvilManager.UserController.MatchUserStart(managerRoomType, "", new Payload(roomOption));
        if(result.ErrorCode == ResultCodeMatchUserStart.MATCH_USER_START_SUCCESS)
        {  
            // 요청 성공
        } else
        {
            // 실패
        }
    }
    catch (Exception e)
    {
        // 예외
    }
}


You can be notified via onMatchUserDoneListeners or IUserListener.OnMatchUserDone if the match was successful, or via onMatchUserTimeoutListeners or IUserListener.OnMatchUserTimeout if the match was not successful in time.

/// <summary>
/// Representative to receive user matching results
/// </summary>
userAgent.onMatchUserDoneListeners += (UserAgent userAgent, GameAnvil.Defines.ResultCodeMatchUserDone result, bool created, int roomId, Payload payload) => {
    /// <param name="userAgent">The user agent that requested MatchUserStart() or MatchPartyStart()</param>.
    /// <param name="result">Result of the MatchUserStart() or MatchPartyStart() request</param>
    /// <param name="created">Whether a room was created</param>
    /// <param name="roomId">Id of the matched room</param>
    /// <param name="payload">Additional information received from the server</param>
};

/// <summary>
/// User matching timeout notification proxy
/// </summary>
userAgent.onMatchUserTimeoutListeners += (UserAgent userAgent) => {
    /// <param name="userAgent">The user agent that requested MatchUserStart() or MatchPartyStart()</param>.
};


You can cancel user matchmaking by calling MatchUserCancel(). If you are not in the middle of requesting a user match, the cancel request might fail if user matching has already succeeded or a timeout has occurred.

/// <summary>
/// Cancel a user match request<para></para>
/// If not in the middle of a match request, fails if a match has already succeeded or a timeout has occurred<para></para>
/// </summary>
/// <param name="roomType">The type of bar requested to be matched</param>
/// <param name="onMatchUserCancel">The agent to cancel the result</param>.
userAgent.MatchUserCancel(Constants.RoomType, (UserAgent user, Defines.ResultCodeMatchUserCancel result) => {
    /// <param name="userAgent">The user agent that requested MatchUserCancel()</param>
    /// <param name="result">Result of the MatchUserCancel() request</param>
    if(result == Defines.ResultCodeMatchUserCancel.MATCH_USER_CANCEL_SUCCESS){
        // Matchmaking cancel success
    } else {
        // Failed to cancel matchmaking
    }
});

Other features of the User Agent, such as party matchmaking, channels, listeners, and more, are described in the Unity Advanced Development Guide > UserAgent.

TOP