Skip to content
This repository has been archived by the owner on Jul 7, 2022. It is now read-only.
/ Sharp.Xmpp Public archive
forked from pgstath/Sharp.Xmpp

Commit

Permalink
Set your availability in a chatroom
Browse files Browse the repository at this point in the history
  • Loading branch information
John Penny committed Sep 20, 2016
1 parent 4bcbdee commit b18298c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 3 deletions.
9 changes: 9 additions & 0 deletions Client/XmppClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1791,6 +1791,15 @@ public void JoinRoom(Jid chatRoom, string nickname, string password = null)
groupChat.JoinRoom(chatRoom, nickname, password);
}

/// <summary>
/// Sets your presence in the specified room.
/// </summary>
public void SetRoomStatus(Jid roomWithNick, Availability availability)
{
AssertValid();
groupChat.SetStatusInRoom(roomWithNick, availability);
}

/// <summary>
/// Leaves the specified room.
/// </summary>
Expand Down
39 changes: 36 additions & 3 deletions Extensions/XEP-0045/MultiUserChat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -210,13 +210,46 @@ public RoomInfoExtended GetRoomInfo(Jid chatRoom)
/// <param name="password">(Optional) Password</param>
public void JoinRoom(Jid jid, string nickname, string password = null)
{
List<XmlElement> elems = new List<XmlElement>();
elems.Add(Xml.Element("show").Text("online"));

XmlElement elem = Xml.Element("x", MucNs.NsMain);

if (!string.IsNullOrEmpty(password))
elem.Child(Xml.Element("password").Text(password));
elems.Add(elem.Child(Xml.Element("password").Text(password)));

Jid joinRequest = new Jid(jid.Domain, jid.Node, nickname);
var msg = new Im.Presence(joinRequest, im.Jid, PresenceType.Available, null, null, elem);
var msg = new Im.Presence(joinRequest, im.Jid, PresenceType.Available, null, null, elems.ToArray());

im.SendPresence(msg);
}

/// <summary>
/// Sets your presence in the specified room.
/// </summary>
public void SetStatusInRoom(Jid roomWithNick, Availability availability)
{
PresenceType presnceState = PresenceType.Available;
XmlElement elem = null;
var states = new Dictionary<Availability, string>()
{
{ Availability.Online, "online" },
{ Availability.Away, "away" },
{ Availability.Dnd, "dnd" },
{ Availability.Xa, "xa" },
{ Availability.Chat, "chat" }
};

if (availability == Availability.Offline)
{
presnceState = PresenceType.Unavailable;
}
else
{
elem = Xml.Element("show").Text(states[availability]);
}

var msg = new Im.Presence(roomWithNick, im.Jid, presnceState, null, null, elem);

im.SendPresence(msg);
}

Expand Down

0 comments on commit b18298c

Please sign in to comment.