방 서버 연결¶
방 서버는 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 참조). 이 값들을 변경할 때는 조심해야 합니다. 설정이 바르지 않으면 방 서버 연결이 해제될 수 있습니다.