방 검색

일반적으로 매치메이킹 기능이 있는 게임에서는 플레이어가 입장할 매치를 검색할 수 있습니다. Strix에서는 몇 가지 검색 메서드로 가능합니다.

검색 모드

가장 기본이 되는 SearchRoom 메서드는 인수를 일곱 개 이용하는 것입니다.

void SearchRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

SearchRoom 메서드의 오버로드는 두 가지로, 결과의 조건과 순서가 생략되어 있습니다. 편의에 따라 추가합니다.

void SearchRoom(int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchRoom(ICondition condition, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

또, 멤버가 더 입장할 수 있는 방만 검색하는 특화 메서드(이름이 다름)도 두 개 있습니다.

void SearchJoinableRoom(int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
void SearchJoinableRoom(ICondition condition, Order order, int limit, int offset, RoomSearchEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

참고

방이 하나도 없다면 검색 메서드는 성공적으로 완료되고 성공 핸들러를 호출하여 빈 컬렉션을 찾은 방으로 전달합니다.

검색 조건을 지정했으나 조건에 맞는 방이 없을 때도 마찬가지입니다.

검색 조건

Strix는 검색 결과를 좁히기 위해 검색 기능 중 일부에 condition이라고 하는 인수를 추가합니다.

이렇게 하면 특화된 API로 복잡한 검색 쿼리를 만들 수 있습니다. 쿼리를 만들 때 ConditionBuilder 클래스가 간단한 인터페이스 역할을 합니다.

먼저, ConditionBuilder.Builder()를 호출합니다. 조건은 모두 필드로 시작하므로, 빌더에서 Field 메서드를 호출하여 필드의 이름을 지정해도 됩니다.

ConditionBuilder.Builder()
.Field("capacity")

이어서 다음 조건 절 중에서 하나를 추가해야 합니다. 이 조건문은 대부분 터미널 값이나 기타 필드를 수용합니다.

예를 들어, 용량이 4인지 여부를 다음 방법으로 확인할 수 있습니다.

ConditionBuilder.Builder()
.Field("capacity")
.EqualTo(4)

또는, 용량이 멤버 수와 같은지 확인해도 됩니다.

ConditionBuilder.Builder()
.Field("capacity")
.EqualTo(new Field("memberCount"))

이어서 And()Or() 메서드로 절을 추가하거나 Build() 메서드로 조건을 종료합니다.

참고

스트링에서 작동하는 절은 모두 대소문자를 구분해야 합니다.

검색 순서

Strix에는 일부 검색 기능에 order 인수가 있습니다. 검색 결과를 표시하는 순서를 지정해 주는 인수입니다.

Order order = new Order("MyField", OrderType.Ascending);

// 내림차순의 경우
order.SetOrderType(OrderType.Descending);

fieldName은 순서의 기준이 되는 필드 이름이며, orderType은 목록의 순서를 표시하는 방향입니다.

코드 예시

using SoftGear.Strix.Client.Core.Model.Manager.Filter.Builder;
using SoftGear.Strix.Unity.Runtime;
using UnityEngine;

public class StrixSearchRoomExample : MonoBehaviour
{
    void Start()
    {
        var strixNetwork = StrixNetwork.instance;

        // 플레이스홀더 값. 이것을 실제 애플리케이션 ID로 변경
        // Strix Cloud 애플리케이션 정보에서 확인 가능: https://www.strixcloud.net/app/applist
        strixNetwork.applicationId = "00000000-0000-0000-0000-000000000000";

        // 먼저 마스터 서버로 연결
        strixNetwork.ConnectMasterServer(
            // 플레이스홀더 값. 이것을 실제 마스터 호스트 이름으로 변경
            // Strix Cloud 애플리케이션 정보에서 확인 가능: https://www.strixcloud.net/app/applist
            host: "000000000000000000000000.game.strixcloud.net",
            connectEventHandler: _ => {
                Debug.Log("Connection established.");

                // 마스터 서버에 연결한 후에는 방 만들기 가능
                strixNetwork.CreateRoom(
                    new RoomProperties { name = "My Game Room" },
                    new RoomMemberProperties { name = "My Player Name" },
                    handler: __ => {
                        Debug.Log("Room 1 created.");

                        // 이제 방이 만들어졌으니 SearchRoom 방법으로 찾을 수 있는지 확인해 봅시다
                        strixNetwork.SearchRoom(
                            condition: ConditionBuilder.Builder().Field("name").EqualTo("My Game Room").Build(),  // "My Game Room"이라는 이름의 방 모두 검색
                            limit: 10,                                                                            // 결과는 10개뿐
                            offset: 0,                                                                            // 맨 처음 있는 것부터 시작
                            handler: searchResults => {
                                Debug.Log(searchResults.roomInfoCollection.Count + " rooms found.");

                                // 검색이 끝나면 발견된 방 전체에 관한 정보를 인쇄
                                foreach (var roomInfo in searchResults.roomInfoCollection)
                                    Debug.Log("Room ID: " + roomInfo.id
                                        + "\nHost: " + roomInfo.host
                                        + "\nMember count: " + roomInfo.memberCount
                                        + "\nCapacity: " + roomInfo.capacity
                                    );
                            },
                            failureHandler: searchError => Debug.LogError("Search failed. Reason: " + searchError.cause));
                    },
                    failureHandler: createRoomError => Debug.LogError("Could not create room. Reason: " + createRoomError.cause)
                );
            },
            errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
        );
    }
}

참고

applicationIdhost의 플레이스홀더 값은 Strix Cloud 애플리케이션 정보 탭에서 볼 수 있는 실제값으로 바꿔야 합니다.