방과 방 멤버 정보 가져오기

StrixNetwork 싱글톤의 room 속성을 이용하여 현재 방 정보를 가져올 수 있습니다. 아무 방에도 입장하지 않은 상태라면 속성은 null 값을 리턴합니다.

방 속성

room 속성에는 다음과 같은 필드가 있으며, 아래 표에 나와 있는 게터(getter)를 이용하여 읽을 수 있습니다.

이름

타입

설명

게터

name

string

방장이 방에 부여한 이름.

GetName()

capacity

int

방이 현재 수용할 수 있는 멤버의 최대 수.
확인은 새 클라이언트가 방에 입장하려고 할 때만 합니다.
게임을 하는 과정에서 이 속성이 바뀌고 멤버의 현재 수가 새 값을 초과하면 기존 멤버는 퇴장당하지 않습니다.

GetCapacity()

password

string

이 필드는 방 속성을 참조할 때 빈 상태가 됩니다.
설정되면 새 클라이언트는 방에 입장할 때 올바른 비밀번호를 제공해야 합니다.
비밀번호가 맞지 않거나 입력되지 않으면 입장이 거절됩니다.
비워 두면 아무나 방에 입장할 수 있습니다.

GetPassword()

state

int

방의 상태. 정수값으로 표시됩니다.
게임 실행자가 각 값이 나타내는 상태를 정의합니다.

GetState()

isJoinable

bool

거짓으로 설정하면 새 멤버는 방에 입장할 수 없습니다.

GetIsJoinable()

key1-key8

double

커스텀 속성값.

GetKey1()-GetKey8()

stringKey

string

커스텀 스트링 속성값.

GetStringKey()

memberCount

int

현재 방 안에 있는 방 멤버의 수.

GetMemberCount()

properties

Dictionary <string, object>

추가 커스텀 속성값.

GetProperties()

방 멤버 속성

현재 플레이어

네트워크 인스턴스의 selfRoomMember 값에서 다음 속성을 불러올 수 있습니다.

이름

타입

설명

게터

uid

UID

방 멤버의 고유 식별자.

GetUid()

primaryKey

long

서버 데이터베이스에 있는 방 멤버의 기본 키 식별자.

GetPrimaryKey()

roomId

long

이 멤버가 속한 방의 ID.

GetRoomId()

name

string

방 멤버의 이름.

GetName()

properties

Dictionary <string, object>

추가 커스텀 속성값.

GetProperties()

방 멤버 전체

네트워크 인스턴스에서 이용할 수 있는 방 멤버는 두 가지입니다.

roomMembers

키가 멤버들의 ID인 딕셔너리.

sortedRoomMembers

방 멤버 전체가 기본 키를 기준으로 분류.

위와 같이 각 방 멤버로부터 동일한 속성을 가져올 수 있습니다.

새 방에 입장하면 StrixNetwork 싱글톤에서 isRoomOwner 속성을 검사하여 방주인인지 확인할 수 있습니다.

참고

위 명시된 필드는 모두 게터뿐 아니라 세터도 있지만 Strix SDK에서만 이용되며, 최종 사용자가 호출해서는 안 됩니다. 이 필드를 설정하면 로컬에서만 적용됩니다.

코드 예시

using SoftGear.Strix.Unity.Runtime;
using UnityEngine;

class GettingRoomInfoSample : 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(
                    roomProperties: new RoomProperties
                    {
                        name = "Athens",
                        password = "66e3f2nk",
                        capacity = 20,
                        key1 = 3.2,
                        state = 12,
                        stringKey = "Tokyo"
                    },
                    memberProperties: new RoomMemberProperties
                    {
                        name = "Artemis"
                    },
                    handler: createRoomResult => {
                        var room = strixNetwork.room;

                        Debug.Log(
                            "Room name: " + room.GetName()                        // 방 이름은 그것을 만들 때 설정한 것, 즉 Athens와 같아야 함
                            + "\nRoom capacity: " + room.GetCapacity()            // 용량은 20으로 해야 함
                            + "\nRoom password: " + room.GetPassword()            // 비밀번호를 설정했지만 읽을 수 없으므로 비워둬야 함
                            + "\nRoom state: " + room.GetState()                  // 앞서 설정한 상태. 12가 되어야 함
                            + "\nRoom is joinable: " + room.GetIsJoinable()       // 방을 만들 때 지정하지 않았기 때문에 기본으로 입장이 가능해야 함
                            + "\nRoom's key1: " + room.GetKey1()                  // 앞서 설정한 키. 3.2가 되어야 함
                            + "\nRoom's string key: " + room.GetStringKey()       // 앞서 설정한 이 스트링 키. "Tokyo"가 되어야 함
                            + "\nRoom's member count: " + room.GetMemberCount()   // 멤버가 우리뿐이므로 1이 되어야 함
                        );

                        var roomMember = strixNetwork.selfRoomMember;

                        Debug.Log(
                            "Room member name: " + roomMember.GetName()           // 멤버 이름은 그것을 만들 때 설정한 것, 즉 Artemis와 같아야 함
                        );
                    },
                    failureHandler: createRoomError => Debug.LogError("Could not create room. Reason: " + createRoomError.cause)
                );
            },
            errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
        );
    }
}

참고

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