using System.Collections.Generic; using System.Linq; using log4net; using NPSharp.Master.Data; namespace NPSharp.Master.Messages.Client { /// /// Represents a request message for the master server for a standard dedicated server list. /// [MasterClientMessage("getservers")] public class MasterGetServersMessage : MasterClientMessage { private static readonly ILog Log; static MasterGetServersMessage() { Log = LogManager.GetLogger(typeof (MasterGetServersMessage)); } /// /// The game for which servers should be fetched /// public string GameName { get; set; } /// /// The protocol version of the dedicated servers to search for /// public uint ProtocolVersion { get; set; } /// /// Extra keywords to take care of when generating the server list /// public List Keywords { get; set; } protected override string Serialize() { // I wonder if an extra useless space char at the end is okay in this case return string.Format("{0} {1} {2} {3}", Name, GameName, ProtocolVersion, string.Join(" ", Keywords.Select(k => k.ToString()))); } protected override void Deserialize(string[] arguments) { GameName = arguments[0]; ProtocolVersion = uint.Parse(arguments[1]); foreach (var kw in arguments.Skip(2)) { switch (kw.ToLower()) { case "empty": Keywords.Add(MasterGetServersKeywords.Empty); break; case "full": Keywords.Add(MasterGetServersKeywords.Full); break; default: Log.WarnFormat("{0}: weird keyword {1}", Name, kw); break; } } } } }