public override void HandlePresence(Streams.XmppStream stream, Presence presence, XmppHandlerContext context) { if (presence.Type == PresenceType.available || presence.Type == PresenceType.unavailable) { if (!ReferenceEquals(Member.Stream, stream)) { //Set stream Member.Stream = stream; if (presence.Type == PresenceType.available) { //If stream changed then we should broadcast presences Member.ReEnterRoom(); } } Member.ChangePesence(presence); } else { //Bad request presence.SwitchDirection(); presence.From = Member.RoomFrom; presence.Type = PresenceType.error; presence.Error = new Error(ErrorCondition.BadRequest); context.Sender.SendTo(stream, presence); } }
public override void HandlePresence(XmppStream stream, Presence presence, XmppHandlerContext context) { //Presence to open new room if (MucHelpers.IsJoinRequest(presence)) { //Register Service.CreateRoom(new Jid(presence.To.Bare), null); Service.HandlerManager.ProcessStreamElement(presence, stream);//Forward to room } else { //Return error presence.Type = PresenceType.error; presence.Error = new Error(ErrorType.cancel, ErrorCondition.NotAllowed); presence.SwitchDirection(); context.Sender.SendTo(stream, presence); } }
private void ErrorPresence(Presence presence, ErrorCondition condition, int code) { presence.Type = PresenceType.error; presence.RemoveAllChildNodes(); presence.Error = new Error(condition); if (code != -1) { presence.Error.Code = (ErrorCode)code; } presence.SwitchDirection(); presence.From = Jid; }
private static void ErrorPresence(Presence presence, ErrorCondition condition) { presence.SwitchDirection(); presence.RemoveAllChildNodes(); presence.AddChild(new Muc()); presence.Type = PresenceType.error; presence.Error = new Error(condition); }