public IGameListSubscibtion AddSubscription(PeerBase peer, Hashtable gamePropertyFilter, int maxGameCount) { if (gamePropertyFilter == null) { gamePropertyFilter = new Hashtable(0); } GameChannel gameChannel; var key = new GameChannelKey(gamePropertyFilter); if (!this.GameChannels.TryGetValue(key, out gameChannel)) { gameChannel = new GameChannel(this, key); this.GameChannels.Add(key, gameChannel); } return(gameChannel.AddSubscription(peer, maxGameCount)); }
public GameChannel(GameChannelList gameChannelList, GameChannelKey gamePropertyFilter) { this.key = gamePropertyFilter; this.gameChannelList = gameChannelList; foreach (var gameState in gameChannelList.GameDict.Values) { if (gameState.IsVisbleInLobby && this.GameProperties.IsSubsetOf(gameState.Properties)) { this.gameDict.Add(gameState.Id, gameState); } } var sb = new StringBuilder(); bool seperator = false; foreach (DictionaryEntry entry in this.GameProperties) { if (seperator) { sb.Append(" | "); } else { seperator = true; } sb.AppendFormat("{0}:{1}", entry.Key, entry.Value); } this.propertyString = sb.ToString(); if (log.IsDebugEnabled) { log.DebugFormat("Created new game channel: {0}", this.propertyString); } }