private byte[] BuildViewXml()
{
var peercast = Application.PeerCast;
var root = new XElement("peercast");
var servent = new XElement("servent", new XAttribute("uptime", (int)peercast.Uptime.TotalSeconds));
var bandwidth = new XElement("bandwidth",
new XAttribute("in", peercast.Channels.Sum(c => c.ChannelInfo.Bitrate)),
new XAttribute("out", peercast.Channels.Sum(c => c.OutputStreams.Sum(os => os.UpstreamRate))));
var connections = new XElement("connections",
new XAttribute("total", peercast.Channels.Sum(c => c.LocalDirects + c.LocalRelays)),
new XAttribute("relays", peercast.Channels.Sum(c => c.LocalRelays)),
new XAttribute("direct", peercast.Channels.Sum(c => c.LocalDirects)));
var channels_relayed = new XElement("channels_relayed",
new XAttribute("total", peercast.Channels.Count));
foreach (var c in peercast.Channels) {
channels_relayed.Add(BuildChannelXml(c));
}
var channels_found = new XElement("channels_found",
new XAttribute("total", peercast.Channels.Count));
foreach (var c in peercast.Channels) {
channels_found.Add(BuildChannelXml(c));
}
root.Add(
servent,
bandwidth,
connections,
channels_relayed,
channels_found);
var res = new MemoryStream();
using (var writer = new StreamWriter(res)) {
root.Save(writer);
}
return res.ToArray();
}