public static void Load() { // Why wo uld you ever load more than once? if (Channels.Count > 0) return; using (var reader = new XmlTextReader("channel.xml")) { while (reader.Read()) { switch (reader.Name) { case "CHANNEL": var channel = new ChannelTraits(Muids.GetNext()); channel.ChannelName = reader.GetAttribute("name"); if (!Int32.TryParse(reader.GetAttribute("levelmin"), out channel.MinLevel)) channel.MinLevel = 0; channel.MaxUsers = Int32.Parse(reader.GetAttribute("maxplayers")); switch (reader.GetAttribute("rule")) { case "elite": channel.Rule = ChannelRule.Elite; break; case "duel": channel.Rule = ChannelRule.Elite; channel.Type = ChannelType.DuelTournament; break; } Add(channel); break; } } } }
public static void AddAndJoin(Client client, ChannelTraits channelTraits) { channelTraits.ChannelId = Muids.GetNext(); Add(channelTraits); Find(channelTraits.ChannelId).Join(client); }
public static void Add(ChannelTraits c) { lock (ObjectLock) Channels.Add(new Channel(c)); }
public static void Remove(ChannelTraits c) { lock(ObjectLock) Channels.Remove(Channels.Find(channel => channel.GetTraits().Equals(c))); }
public static void ResponseChannelJoinFromName(Client client, PacketReader packetReader) { var uid = packetReader.ReadUInt64(); var type = packetReader.ReadInt32(); var name = packetReader.ReadString(); if (!Enum.IsDefined(typeof(ChannelType), (byte)type)) { client.Disconnect(); return; } Channels.Channel c = ChannelList.Find((ChannelType) type, name); if (c == null) { var channel = new ChannelTraits(); channel.ChannelName = name; channel.Rule = ChannelRule.Elite; channel.Type = (ChannelType)type; channel.MaxLevel = 100; channel.MinLevel = 0; channel.MaxUsers = 100; ChannelList.AddAndJoin(client, channel); return; } client.ClientPlayer.PlayerChannel = c; c.Join(client); }
public Channel(ChannelTraits traits) { _traits = traits; }