Monobit Unity Networking ver.2.8.0 Server API Reference (C++)
MunMasterMatchingRoom.hpp
Go to the documentation of this file.
1 
7 #ifndef __MUN_MASTER_MATCHING_ROOM_HPP__
8 #define __MUN_MASTER_MATCHING_ROOM_HPP__
9 
10 #include <map>
11 #include <vector>
12 #include <mrs.hpp>
13 #include <stream/MunStream.hpp>
14 #include <log/MunLogger.hpp>
16 
21 {
22 protected:
24  uint64 m_Id;
25 
27  std::string m_Name;
28 
30  uint64 m_LobbyId;
31 
34 
36  bool m_IsOpen;
37 
39  uint32 m_MaxPlayers;
40 
42  std::map< int32, MatchingPlayerInRoom > m_PlayersInRoom;
43 
45  int32 m_HostId;
46 
49 
51  std::map< std::string, STREAM::Union > m_RoomParameters;
52 
54  std::vector< std::string > m_LobbyParameters;
55 
57  uint64 m_RoomUid;
58 
61 
62 public:
67  uint64 GetId() { return m_Id; }
68 
73  void SetId(uint64 id) { m_Id = id; }
74 
79  std::string GetName() { return m_Name; }
80 
85  void SetName(std::string name) { m_Name = name; }
86 
91  uint64 GetLobbyId() { return m_LobbyId; }
92 
97  void SetLobbyId(uint64 lobbyId) { m_LobbyId = lobbyId; }
98 
103  bool GetIsVisible() { return m_IsVisible; }
104 
109  void SetIsVisible(bool isVisible) { m_IsVisible = isVisible; }
110 
115  bool GetIsOpen() { return m_IsOpen; }
116 
121  void SetIsOpen(bool isOpen) { m_IsOpen = isOpen; }
122 
127  uint32 GetMaxPlayers() { return m_MaxPlayers; }
128 
133  void SetMaxPlayers(uint32 maxPlayers) { m_MaxPlayers = maxPlayers; }
134 
141  if( m_PlayersInRoom.size() > STREAM::PLAYER_MAX ) {
142  MRSEXT_LOG_ERR( "m_PlayersInRoom.size() is over %d", STREAM::PLAYER_MAX );
143  return false;
144  }
145  if( m_RoomParameters.size() > STREAM::ROOM_PARAMETERS_MAX ) {
146  MRSEXT_LOG_ERR( "m_RoomParameters.size() is over %d", STREAM::ROOM_PARAMETERS_MAX );
147  return false;
148  }
149  info.name.text = m_Name;
150  info.maxPlayers = m_MaxPlayers;
151  info.isVisible = m_IsVisible;
152  info.isOpen = m_IsOpen;
153  info.hostId = GetHostId();
154  info.playersLen = m_PlayersInRoom.size();
155  info.roomParametersLen = 0;
156  if( m_RoomParameters.size() > 0 )
157  {
158  for( std::map<std::string, STREAM::Union>::iterator itr = m_RoomParameters.begin(); m_RoomParameters.end() != itr; ++itr ) {
159  STREAM::Text roomParamKey = STREAM::Text(itr->first);
160  //ロビーパラメータに設定されていないものは除きます。
161  for(std::vector<std::string>::iterator lobby_itr = m_LobbyParameters.begin();
162  m_LobbyParameters.end()!=lobby_itr;lobby_itr++){
163  if(itr->first == *lobby_itr){
164  info.roomParameters[info.roomParametersLen] = STREAM::KeyValue( roomParamKey, itr->second );
165  info.roomParametersLen++;
166  }
167  }
168  }
169  }
170  return true;
171  }
172 
177  void GetInfo(STREAM::RoomInfo& info) {
178  if( m_PlayersInRoom.size() > STREAM::PLAYER_MAX ) {
179  MRSEXT_LOG_ERR( "m_PlayersInRoom.size() is over %d", STREAM::PLAYER_MAX );
180  return;
181  }
182  if( m_RoomParameters.size() > STREAM::ROOM_PARAMETERS_MAX ) {
183  MRSEXT_LOG_ERR( "m_RoomParameters.size() is over %d", STREAM::ROOM_PARAMETERS_MAX );
184  return;
185  }
186  if( m_LobbyParameters.size() > STREAM::LOBBY_PARAMETERS_MAX ) {
187  MRSEXT_LOG_ERR( "m_LobbyParameters.size() is over %d", STREAM::LOBBY_PARAMETERS_MAX );
188  return;
189  }
190  info.name.text = m_Name;
191  info.isVisible = m_IsVisible;
192  info.isOpen = m_IsOpen;
193  info.maxPlayers = m_MaxPlayers;
194  info.playersLen = m_PlayersInRoom.size();
195  info.roomParametersLen = 0;
196  info.hostId = GetHostId();
197  if( m_RoomParameters.size() > 0 )
198  {
199  for( std::map<std::string, STREAM::Union>::iterator itr = m_RoomParameters.begin(); m_RoomParameters.end() != itr; ++itr ) {
200  STREAM::Text roomParamKey = STREAM::Text(itr->first);
201  info.roomParameters[info.roomParametersLen] = STREAM::KeyValue( roomParamKey, itr->second );
202  info.roomParametersLen++;
203  }
204  }
205  info.lobbyParametersLen = 0;
206  if( m_LobbyParameters.size() > 0 )
207  {
208  for( std::vector<std::string>::iterator itr = m_LobbyParameters.begin(); m_LobbyParameters.end() != itr; ++itr ) {
210  info.lobbyParametersLen++;
211  }
212  }
213  }
218  std::map<int32, MatchingPlayerInRoom >* GetPlayers() { return &m_PlayersInRoom; }
219 
226  if( m_PlayersInRoom.size() == 0 ) return NULL;
227  std::map< int32, MatchingPlayerInRoom >::iterator itr = m_PlayersInRoom.find(id);
228  return ( m_PlayersInRoom.end() != itr ) ? &(itr->second) : NULL;
229  }
230 
238  void AddPlayer( int32 playerId, uint32 clientId, std::string clientName, MatchingPlayerInRoom& player ) {
239  m_PlayersInRoom.insert( std::pair< int32, MatchingPlayerInRoom >( playerId, MatchingPlayerInRoom( playerId, clientId, clientName, player.GetParameters(), player.GetParametersLen() ) ) );
240  }
241 
246  void RemovePlayer( int32 playerId ) {
247  m_PlayersInRoom.erase( playerId );
248  }
249 
254  int32 GetHostId() {
255  if ( 0 < m_HostId ){
256  // 該当するプレイヤーが存在する場合、値をそのまま返す
257  if( NULL != GetPlayer( m_HostId ) ) {
258  return m_HostId;
259  }
260  }
261 
262  if ( ! m_IsNeedHostPlayer ){
263  m_HostId = 0;
264  }else{
265  // 該当するプレイヤーが存在しない場合、ルーム内プレイヤーのうち、最も古いプレイヤーを新規ルームマスターとして、そのIDを返す
266  m_HostId = ( 0 == m_PlayersInRoom.size() ) ? 0 : m_PlayersInRoom.begin()->first;
267  }
268  return m_HostId;
269  }
270 
275  void SetHostId(int32 hostId) { m_HostId = hostId; }
276 
281  int32 GetNextPlayerId() { return ++m_NextPlayerId; }
282 
287  std::map< std::string, STREAM::Union >& GetRoomParameters() { return m_RoomParameters; }
288 
293  void SetRoomParameters(std::map< std::string, STREAM::Union >& roomParameters) { m_RoomParameters = roomParameters; }
294 
300  void SetRoomParameters(STREAM::KeyValue* pRoomParameters, uint16 roomParametersLen) {
301  m_RoomParameters.clear();
302  for( uint16 index = 0; index < roomParametersLen; index++ ) {
303  m_RoomParameters[pRoomParameters[index].key.text] = pRoomParameters[index].value;
304  }
305  }
306 
311  std::vector< std::string >& GetLobbyParameters() { return m_LobbyParameters; }
312 
317  void SetLobbyParameters(std::vector< std::string >& lobbyParameters) { m_LobbyParameters = lobbyParameters; }
318 
324  void SetLobbyParameters(STREAM::Text* pLobbyParameters, uint16 lobbyParametersLen ) {
325  m_LobbyParameters.clear();
326  for( uint16 index = 0; index < lobbyParametersLen; index++ ) {
327  m_LobbyParameters.push_back(pLobbyParameters[index].text);
328  }
329  }
330 
335  std::map<std::string, STREAM::Union> GetVisibleRoomParameters() {
336  std::map<std::string, STREAM::Union> roomParameters;
337  // ルームパラメータのうち、ロビー通知パラメータに登録されている要素を roomParameters に登録
338  for( std::vector<std::string>::iterator itr = m_LobbyParameters.begin(); m_LobbyParameters.end() != itr; ++itr ) {
339  if( m_RoomParameters.end() == m_RoomParameters.find( *itr ) ) continue;
340  roomParameters.insert( std::pair<std::string, STREAM::Union>( *itr, m_RoomParameters[ *itr ] ) );
341  }
342  return roomParameters;
343  }
344 
349  uint64 GetRoomUid() { return m_RoomUid; }
350 
355  void SetRoomUid(uint64 roomUid) { m_RoomUid = roomUid; }
356 
362 
363 public:
375  MatchingRoom( uint64 id = 0, std::string name = "", uint64 lobbyId = 0, bool isVisible = true, bool isOpen = true, uint32 maxPlayers = 0, uint64 roomUid = 0, bool isNeedHostPlayer = true )
376  {
377  m_Id = id;
378  m_Name = name;
379  m_LobbyId = lobbyId;
380  m_IsVisible = isVisible;
381  m_IsOpen = isOpen;
382  m_MaxPlayers = maxPlayers;
383 
384  m_HostId = 0;
385  m_NextPlayerId = 0;
386 
387  m_RoomUid = roomUid;
388  m_IsNeedHostPlayer = isNeedHostPlayer;
389  }
390 
394  virtual ~MatchingRoom() {}
395 
396 public:
403  bool IsRandomJoinable( uint32 maxPlayers = 0 );
404 };
405 
406 #endif /* __MUN_MASTER_MATCHING_ROOM_HPP__ */
void SetRoomParameters(STREAM::KeyValue *pRoomParameters, uint16 roomParametersLen)
ルームパラメータの設定.
Definition: MunMasterMatchingRoom.hpp:300
uint8 isOpen
他プレイヤーのルーム入室を許可するかどうかのフラグ.
Definition: MunStream.hpp:1292
MatchingRoom(uint64 id=0, std::string name="", uint64 lobbyId=0, bool isVisible=true, bool isOpen=true, uint32 maxPlayers=0, uint64 roomUid=0, bool isNeedHostPlayer=true)
コンストラクタ.
Definition: MunMasterMatchingRoom.hpp:375
Text name
ルーム名.
Definition: MunStream.hpp:1463
uint8 isVisible
ルーム情報をロビーに通知するかどうかのフラグ.
Definition: MunStream.hpp:1290
KeyValue roomParameters[ROOM_PARAMETERS_MAX]
ルームパラメータ.
Definition: MunStream.hpp:1475
uint16 roomParametersLen
ルームパラメータの登録数.
Definition: MunStream.hpp:1477
uint8 isOpen
他プレイヤーのルーム入室を許可するかどうかのフラグ.
Definition: MunStream.hpp:1469
uint32 maxPlayers
ルーム内プレイヤー人数の上限.
Definition: MunStream.hpp:1288
KeyValue roomParameters[ROOM_PARAMETERS_MAX]
ルームパラメータ.
Definition: MunStream.hpp:1298
void GetInfo(STREAM::RoomInfo &info)
RPCルーム情報の取得.
Definition: MunMasterMatchingRoom.hpp:177
void SetIsOpen(bool isOpen)
他プレイヤーのルーム入室を許可するかどうかのフラグの設定.
Definition: MunMasterMatchingRoom.hpp:121
uint64 GetLobbyId()
所属するロビーIDの取得.
Definition: MunMasterMatchingRoom.hpp:91
uint64 GetRoomUid()
mun_roomサーバ上の識別ユニークIDの取得.
Definition: MunMasterMatchingRoom.hpp:349
std::string m_Name
ルーム名.
Definition: MunMasterMatchingRoom.hpp:27
int32 m_HostId
ホストID.
Definition: MunMasterMatchingRoom.hpp:45
bool IsRandomJoinable(uint32 maxPlayers=0)
このルームにランダム入室可能かどうかを調べる.
Definition: MunMasterMatchingRoom.cpp:16
uint64 m_LobbyId
所属するロビーID.
Definition: MunMasterMatchingRoom.hpp:30
uint32 GetMaxPlayers()
ルームに入室可能なプレイヤー人数の上限の取得.
Definition: MunMasterMatchingRoom.hpp:127
uint64 GetId()
ルームIDの取得.
Definition: MunMasterMatchingRoom.hpp:67
std::map< int32, MatchingPlayerInRoom > * GetPlayers()
このルーム内にいる全てのプレイヤー情報の取得.
Definition: MunMasterMatchingRoom.hpp:218
bool m_IsNeedHostPlayer
ホストプレイヤーが必要かどうかのフラグ.
Definition: MunMasterMatchingRoom.hpp:60
MUNにおける通信データ情報.
void SetName(std::string name)
ルーム名の設定.
Definition: MunMasterMatchingRoom.hpp:85
std::map< std::string, STREAM::Union > m_RoomParameters
ルームパラメータ.
Definition: MunMasterMatchingRoom.hpp:51
#define MRSEXT_LOG_ERR(_format,...)
mrs拡張ログ入力(ERR).
Definition: MunLogger.hpp:65
任意のKey-Valueペア.
Definition: MunStream.hpp:602
bool GetIsNeedHostPlayer()
ホストプレイヤーが必要かどうかのフラグの取得.
Definition: MunMasterMatchingRoom.hpp:361
void SetLobbyParameters(std::vector< std::string > &lobbyParameters)
ロビー通知パラメータの設定.
Definition: MunMasterMatchingRoom.hpp:317
void SetId(uint64 id)
ルームIDの設定.
Definition: MunMasterMatchingRoom.hpp:73
std::string GetName()
ルーム名の取得.
Definition: MunMasterMatchingRoom.hpp:79
int32 GetNextPlayerId()
次に入室するプレイヤーに割り当てられるプレイヤーIDの取得.
Definition: MunMasterMatchingRoom.hpp:281
std::vector< std::string > & GetLobbyParameters()
ロビー通知パラメータの取得.
Definition: MunMasterMatchingRoom.hpp:311
int32 hostId
ホストID.
Definition: MunStream.hpp:1294
Text key
キー情報.
Definition: MunStream.hpp:606
std::map< int32, MatchingPlayerInRoom > m_PlayersInRoom
このルーム内にいるプレイヤー情報.
Definition: MunMasterMatchingRoom.hpp:42
Text name
ルーム名.
Definition: MunStream.hpp:1286
void SetRoomUid(uint64 roomUid)
mun_roomサーバ上の識別ユニークIDの設定.
Definition: MunMasterMatchingRoom.hpp:355
uint32 playersLen
プレイヤーの登録数.
Definition: MunStream.hpp:1296
uint8 isVisible
ルーム情報をロビーに通知するかどうかのフラグ.
Definition: MunStream.hpp:1467
uint32 playersLen
プレイヤーの登録数.
Definition: MunStream.hpp:1473
uint64 m_Id
ルームID.
Definition: MunMasterMatchingRoom.hpp:24
uint64 m_RoomUid
mun_roomサーバ上の識別ユニークID.
Definition: MunMasterMatchingRoom.hpp:57
std::string text
可変長テキスト実体.
Definition: MunStream.hpp:335
bool m_IsOpen
他プレイヤーのルーム入室を許可するかどうかのフラグ.
Definition: MunMasterMatchingRoom.hpp:36
uint16 lobbyParametersLen
ロビー通知パラメータの登録数.
Definition: MunStream.hpp:1304
ログ管理.
std::map< std::string, STREAM::Union > GetVisibleRoomParameters()
ロビー通知対象となるルームパラメータの取得.
Definition: MunMasterMatchingRoom.hpp:335
void SetLobbyParameters(STREAM::Text *pLobbyParameters, uint16 lobbyParametersLen)
ロビー通知パラメータの設定.
Definition: MunMasterMatchingRoom.hpp:324
uint32 m_MaxPlayers
ルームに入室可能なプレイヤー人数の上限。0であれば無制限となる.
Definition: MunMasterMatchingRoom.hpp:39
1つのルームに対して設定可能な、ロビー通知カスタムパラメータの最大数.
Definition: MunStream.hpp:274
void SetHostId(int32 hostId)
ホストIDの設定.
Definition: MunMasterMatchingRoom.hpp:275
Text lobbyParameters[LOBBY_PARAMETERS_MAX]
ロビー通知パラメータ.
Definition: MunStream.hpp:1302
bool GetSummaryInfo(STREAM::SummaryRoomInfo &info)
ルーム統計情報の取得.
Definition: MunMasterMatchingRoom.hpp:140
void SetRoomParameters(std::map< std::string, STREAM::Union > &roomParameters)
ルームパラメータの設定.
Definition: MunMasterMatchingRoom.hpp:293
void SetMaxPlayers(uint32 maxPlayers)
ルームに入室可能なプレイヤー人数の上限の設定.
Definition: MunMasterMatchingRoom.hpp:133
bool GetIsOpen()
他プレイヤーのルーム入室を許可するかどうかのフラグの取得.
Definition: MunMasterMatchingRoom.hpp:115
マッチングルーム内プレイヤー情報.
Definition: MunMasterMatchingPlayerInRoom.hpp:16
std::vector< std::string > m_LobbyParameters
ロビー通知パラメータ.
Definition: MunMasterMatchingRoom.hpp:54
int32 GetHostId()
ホストIDの取得.
Definition: MunMasterMatchingRoom.hpp:254
uint16 roomParametersLen
ルームパラメータの登録数.
Definition: MunStream.hpp:1300
void AddPlayer(int32 playerId, uint32 clientId, std::string clientName, MatchingPlayerInRoom &player)
指定されたプレイヤーIDの入室処理(ルーム内プレイヤー情報として加える).
Definition: MunMasterMatchingRoom.hpp:238
ルーム統計情報.
Definition: MunStream.hpp:1459
uint16 GetParametersLen()
プレイヤーパラメータの登録数の取得.
Definition: MunMasterMatchingPlayerInRoom.hpp:69
uint32 maxPlayers
ルーム内プレイヤー人数の上限.
Definition: MunStream.hpp:1465
マッチングルーム情報.
Definition: MunMasterMatchingRoom.hpp:20
STREAM::KeyValue * GetParameters()
プレイヤーパラメータの取得.
Definition: MunMasterMatchingPlayerInRoom.hpp:63
void SetIsVisible(bool isVisible)
ルーム情報をロビーに通知するかどうかのフラグの設定.
Definition: MunMasterMatchingRoom.hpp:109
ルーム内に入室可能なプレイヤーの最大数.
Definition: MunStream.hpp:271
void SetLobbyId(uint64 lobbyId)
所属するロビーIDの設定.
Definition: MunMasterMatchingRoom.hpp:97
mun_masterサーバのマッチングルーム内プレイヤー情報の制御.
virtual ~MatchingRoom()
デストラクタ.
Definition: MunMasterMatchingRoom.hpp:394
bool m_IsVisible
ルーム情報をロビーに通知するかどうかのフラグ.
Definition: MunMasterMatchingRoom.hpp:33
可変長テキスト.
Definition: MunStream.hpp:331
void RemovePlayer(int32 playerId)
指定されたプレイヤーIDの退室処理(ルーム内プレイヤー情報から削除する).
Definition: MunMasterMatchingRoom.hpp:246
bool GetIsVisible()
ルーム情報をロビーに通知するかどうかのフラグの取得.
Definition: MunMasterMatchingRoom.hpp:103
1つのルームに対して設定可能な、ルームカスタムパラメータの最大数.
Definition: MunStream.hpp:273
ルーム情報.
Definition: MunStream.hpp:1282
int32 m_NextPlayerId
次に入室するプレイヤーに割り当てられるプレイヤーID.
Definition: MunMasterMatchingRoom.hpp:48
std::map< std::string, STREAM::Union > & GetRoomParameters()
ルームパラメータの取得.
Definition: MunMasterMatchingRoom.hpp:287
MatchingPlayerInRoom * GetPlayer(int32 id)
指定されたプレイヤーIDを持つルーム内プレイヤー情報の取得.
Definition: MunMasterMatchingRoom.hpp:225
int32 hostId
ホストID.
Definition: MunStream.hpp:1471