OperationRequestParameters Peer::opCreateRoomImplementation(const JString& gameID, bool isVisible, bool isOpen, nByte maxPlayers, const Hashtable& customRoomProperties, const Hashtable& customLocalPlayerProperties, const JVector<JString>& propsListedInLobby) { OperationRequestParameters op; if(gameID.length()) op.put(ParameterCode::ROOM_NAME, ValueObject<JString>(gameID)); Hashtable roomProps(Utils::stripToCustomProperties(customRoomProperties)); if(!isOpen) roomProps.put(Properties::Room::IS_OPEN, isOpen); if(!isVisible) roomProps.put(Properties::Room::IS_VISIBLE, isVisible); if(maxPlayers) roomProps.put(Properties::Room::MAX_PLAYERS, maxPlayers); JString* propsListedInLobbyArr = allocateArray<JString>(propsListedInLobby.getSize()); for(unsigned int i=0; i<propsListedInLobby.getSize(); ++i) propsListedInLobbyArr[i] = propsListedInLobby[i]; roomProps.put(Properties::Room::PROPS_LISTED_IN_LOBBY, propsListedInLobbyArr, propsListedInLobby.getSize()); deallocateArray(propsListedInLobbyArr); op.put(ParameterCode::ROOM_PROPERTIES, ValueObject<Hashtable>(roomProps)); Hashtable playerProperties = Utils::stripToCustomProperties(customLocalPlayerProperties); if(playerProperties.getSize()) op.put(ParameterCode::PLAYER_PROPERTIES, ValueObject<Hashtable>(playerProperties)); op.put(ParameterCode::BROADCAST, ValueObject<bool>(true)); op.put(ParameterCode::CLEANUP_CACHE_ON_LEAVE, ValueObject<bool>(true)); return op; }
OperationRequestParameters Peer::opJoinRoomImplementation(const JString& gameID, const Hashtable& customLocalPlayerProperties) { OperationRequestParameters op; op.put(ParameterCode::ROOM_NAME, ValueObject<JString>(gameID)); Hashtable playerProps = Utils::stripToCustomProperties(customLocalPlayerProperties); if(playerProps.getSize()) op.put(ParameterCode::PLAYER_PROPERTIES, ValueObject<Hashtable>(playerProps)); op.put(ParameterCode::BROADCAST, ValueObject<bool>(true)); return op; }
void MutablePlayer::mergeCustomProperties(const Hashtable& customProperties) { Hashtable stripDict = Utils::stripToCustomProperties(customProperties); if(!stripDict.getSize()) return; Hashtable oldDict = mCustomProperties; mCustomProperties.put(stripDict); mCustomProperties = Utils::stripKeysWithNullValues(mCustomProperties); if(mCustomProperties != oldDict) mLoadBalancingClient->opSetPropertiesOfPlayer(mNumber, stripDict); }
void MutableRoom::mergeCustomProperties(const Hashtable& customProperties) { Hashtable stripDict = Peer::stripToCustomProperties(customProperties); if(!stripDict.getSize()) return; Hashtable oldDict = mCustomProperties; mCustomProperties.put(stripDict); mCustomProperties = Peer::stripKeysWithNullValues(mCustomProperties); if(mCustomProperties != oldDict) mLoadBalancingPeer->opSetPropertiesOfRoom(stripDict); }