実際にルームに参加せずにルームの情報を取得する方法¶
ルーム情報を取得するには、いくつか方法があります。
一つの方法は、SearchJoinableRoom()メソッドを使用することです。例えば、次のコードは最初の10個のRoomInfoのコレクションを返します。
StrixNetwork.instance.SearchJoinableRoom(100, 0,
args => {
foreach (var roomInfo in args.roomInfoCollection) {
Debug.Log(String.Format("Room {0}, {1}", roomInfo.roomId, roomInfo.name));
}
},
args => {
Debug.Log("SearchJoinableRoom failed. error = " + args.cause);
}
);
ここでargs.roomInfoCollectionはRoomInfoインスタンスのコレクションです。RoomInfoクラスには次のフィールドがあります。
フィールド名 |
型 |
---|---|
id |
long |
roomId |
long |
name |
string |
protocol |
string |
port |
int |
host |
string |
isJoinable |
bool |
isPasswordProtected |
bool |
properties |
IDictionary <string, object> |
state |
int |
memberCount |
int |
capacity |
int |
nodeUid |
UID |
nodeType |
int |
nodeProperties |
IDictionary <string, object> |
stringKey |
string |
key1 |
double |
key2 |
double |
key3 |
double |
key4 |
double |
key5 |
double |
key6 |
double |
key7 |
double |
key8 |
double |
もう一つの方法はGetNodeRoom()メソッドを使用することです。これは、主キーを用いて特定のルームに関する情報を返します。CustomizableMatchNodeClientクラスのメソッドです。次のコードをご覧ください。
StrixNetwork.instance.masterSession.nodeClient.GetNodeRoom(
new GetMessage<CustomizableMatchServerNodeRoom>(roomInfo.roomId),
args => {
var room = args.Result.GetModel();
Debug.Log(String.Format("Room {0}, {1}", room.GetPrimaryKey(), room.GetName()));
},
args => {
Debug.Log("GetNodeRoom failed. error = " + args.Result.ToString());
}
);
GetNodeRoom()は、CustomizableMatchServerNodeRoomのインスタンスを返します。このクラスはRoomInfoクラスと同様の情報を提供しますが、情報を取得するためにクラスのプロパティの代わりにメソッドを使用します。
GetMembers()関数は、ルーム自体に参加することなく、目的のルームのメンバー一覧を返すことができます。
StrixNetwork.instance.roomSession.roomClient.GetMembers(
new RoomGetMembersMessage<CustomizableMatchRoom>(roomInfo.roomId),
args => {
foreach (var member in args.Result.GetMemberCollection()) {
Debug.Log(String.Format("Member {0}, {1}", member.GetPrimaryKey(), member.GetName()));
}
},
args => {
Debug.Log("GetRoomMembers failed. error = " + args.Result.ToString());
}
);
ここでGetMembers()は、CustomizableMatchRoomMemberのインスタンスを格納するICollectionのインスタンスを返します。