private void XMPP_Presence(XmlElement element)
{
if (element.Attributes.GetNamedItem("to").Value == JID)
{
string[] frm = element.Attributes.GetNamedItem("from").Value.Split('/');
string roomId = frm[0];
string userId = frm[1];
string type = getValue(element.Attributes.GetNamedItem("type"));
if (Rooms.ContainsKey(frm [0]))
{
Room room = Rooms [roomId];
User user;
if (type == "available" || type == null)
{
if (room.Users.ContainsKey(userId))
{
user = room.Users[userId];
}
else
{
room.UserJoined(userId, user = new User(userId));
}
//room.SendMessage("Willkommen test", user);
foreach (XmlElement el in element.ChildNodes)
{
if (el.Name == "x" && el.FirstChild.Name == "item")
{
string affiliation = getValue(el.FirstChild.Attributes.GetNamedItem("admin"));
string role = getValue(el.FirstChild.Attributes.GetNamedItem("role"));
string premium = getValue(el.FirstChild.Attributes.GetNamedItem("premium"));
string staff = getValue(el.FirstChild.Attributes.GetNamedItem("staff"));
string color = getValue(el.FirstChild.Attributes.GetNamedItem("color"));
user.Affiliation = affiliation ?? user.Affiliation;
user.Role = role ?? user.Role;
user.Premium = premium == null ? user.Premium : bool.Parse(premium);
user.Staff = staff == null ? user.Staff : bool.Parse(staff);
user.Color = color == null ? user.Color : System.Drawing.Color.FromArgb(Convert.ToInt32("ff" + color.Substring(1), 16));
}
}
}
else if (type == "unavailable")
{
room.UserLeft(userId);
}
}
}
}