방 서버 연결

방 서버는 Strix에서 제일 바쁩니다. 각 방의 정보가 여기 들어 있고 플레이어를 관리하는 곳도 여기입니다. 방 서버는 또 방 안에서 플레이어 간 메시지와 이벤트도 통제하고 전달합니다.

방에 입장하거나 방 기능을 이용하려면 방 서버와 연결해야 합니다. 방 서버 연결은 명시적으로 할 수도 있고(방 서버를 검색하여 연결 메서드 호출) 묵시적으로(방 메서드를 직접 호출하여) 할 수도 있습니다.

참고

대부분은 방 서버 연결 메서드를 명시적으로 호출하지 않아도 됩니다. CreateRoom이나 JoinRoom 같은 방 기능은 (아직 연결되지 않았다면) 해당 방 서버로 자동 연결합니다.

방 서버에서 굳이 연결을 해제하지 않아도 됩니다. SDK가 다른 방 서버에 연결해야 하면 방 서버 연결을 자동으로 종료합니다.

이 묵시적인 방 서버 연결이 작동하려면 클라이언트가 마스터 서버에 연결된 상태(또는 이전에 연결되었다가 유휴 타임아웃으로 해제된 상태)여야 합니다.

방 서버 검색

명시적으로 방 서버에 연결하기 위해서는 호스트(IP) 주소와 포트 번호를 알아야 합니다. 마스터 서버에서 검색하면 알 수 있습니다.

StrixNetwork.instance.SearchRoom(
    limit: 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
                + "\nPort: " + roomInfo.port
            );
    },
    failureHandler: searchError => Debug.LogError("Search failed. Reason: " + searchError.cause)
);

참고

SearchRoom 메서드를 이용하면 방 목록이 나오고, 이 목록에서 위와 같이 방 서버에 관한 정보를 정확히 알 수 있습니다. 단 다음 사항에 유의해야 합니다.

  • 목록에 동일한 방 서버의 정보가 여러 번 보일 수 있습니다. 한 서버가 여러 방을 호스팅할 수 있기 때문입니다.

  • 현재 방이 없는 서버에 관한 정보를 볼 수 없습니다. Strix Unity SDK에서 방이 없는 방 서버에 관한 정보는 쉽게 찾을 수 없습니다.

방 서버에 연결하기

방 서버를 검색하고 나면 StrixNetwork 싱글톤의 roomSession 속성에서 Connect 메서드를 호출할 수 있습니다.

StrixNetwork.instance.roomSession.Connect(
    host: roomInfo.host,
    port: roomInfo.port,
    protocol: roomInfo.protocol,
    connectEventHandler: connectResult => Debug.Log("Successfully connected to the room server."),
    errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
);

다른 SDK 메서드와 마찬가지로, 요청이 성공 또는 실패로 끝나면 호출할 콜백을 지나쳐도 됩니다.

방 서버와 이미 연결된 상태일 때 Connect를 호출하면 앞선 연결이 먼저 차단됩니다.

참고

위 예와 같이 방 서버에 연결하기 위해서는 호스트 주소와 포트 번호 외에 프로토콜도 지정해야 합니다. Strix 서버는 여러 가지 트랜스포트 프로토콜을 지원하기 때문입니다. 프로토콜은 하드코드하지 말고 RoomInfo에서 가져오는 것이 좋습니다.

방 서버에 묵시적으로 연결하기

대개는 방 서버에 연결하기 위해 마스터 서버를 수동으로 쿼리할 필요가 없습니다. Strix에는 방 입장을 위해 해당 방의 서버에 자동으로 연결해주는 기능이 있습니다.

자세한 사항은 JoinRoom 또는 JoinRandomRoom을 참조해 주십시오.

연결 해제

방을 사용할 필요가 없을 때는 방 서버에서 연결을 해제해도 됩니다. 연결을 해제해 두면 더 이상 동기화가 되지 않으며, 그 결과 클라이언트는 방을 떠나게 됩니다.

StrixNetwork.instance.roomSession.Disconnect();

참고

방 서버에서 수동으로 연결을 해제해도 사용자가 방 서버 연결이 필요한 동작을 요청하면 StrixNetwork가 같은 (또는 다른) 방 서버에 자동으로 연결해 줍니다.

상태

IsConnected 플래그로 다음과 같이 방 서버 연결의 상태를 확인할 수 있습니다.

bool isConnected = StrixNetwork.instance.roomSession.IsConnected;

클라이언트가 방 서버와 연결되어 있는 경우, 이 속성은 참을 리턴합니다.

방 서버 연결 타임아웃

방 서버 연결은 타임아웃되며 일정 시간 아무런 활동도 관찰되지 않으면 연결이 해제됩니다. 마스터 서버 연결과 달리, 방 서버 타임아웃은 연결이 하드하게 끊어지는 것으로, 플레이어는 있던 방에서 나가게 됩니다.

Strix Unity SDK는 방 서버에 하트비트 메시지를 주기적으로 보냅니다. 기본 구성은 하트비트 간격이 10초, 서버 타임아웃은 120초입니다. 따라서 정상적인 작동 과정에서는 방 서버 연결이 타임아웃되지는 않습니다.

참고

하트비트 타임아웃은 서버 측에서 구성할 수 있습니다. SDK로 하트비트 간격을 변경할 수 있습니다(SyncTimeClient 참조). 이 값들을 변경할 때는 조심해야 합니다. 설정이 바르지 않으면 방 서버 연결이 해제될 수 있습니다.