internal static DataSet GetAllPeersFromConfig(string channel)
{
var peerList = GameConfig.PeerList;
var data = new DataSet {Locale = CultureInfo.InvariantCulture};
var peerTable = data.Tables.Add("Peers");
peerTable.Columns.Add("IPAddress", typeof (String));
peerTable.Columns.Add("Lease", typeof (DateTime));
// The string needs to be Channel,IP,Channel,IP, etc.
var peers = peerList.Split(',');
for (var i = 0; i < peers.Length; i += 2)
{
if (peers[i].Trim().ToLower(CultureInfo.InvariantCulture) ==
channel.ToLower(CultureInfo.InvariantCulture) ||
peers[i].Trim().ToLower(CultureInfo.InvariantCulture) == "all")
{
var row = peerTable.NewRow();
// If we get a bad format in the config file, we should throw an exception so that the
// discovery engine shows red. having a 0.0.0.0 should count as a problem since it
// will teleport locally
if (IPAddress.Parse(peers[i + 1].Trim()).ToString() == "0.0.0.0")
{
throw new ApplicationException("An IP Address in the config file resolved to 0.0.0.0");
}
row["IPAddress"] = peers[i + 1].Trim();
row["Lease"] = DateTime.Now.AddDays(5);
// make it expire in 5 days from now, so it is always different, and always far away
peerTable.Rows.Add(row);
}
}
return data;
}