コード例 #1
0
 public override void HandleMessage(Streams.XmppStream stream, Message msg, XmppHandlerContext context)
 {
     //Private msg
     if (msg.Type == MessageType.chat)
     {
         if (Member.ResolveRoomJid(msg.From) == null)
         {
             //Error
             msg.SwitchDirection();
             msg.From  = Member.RoomFrom;
             msg.Type  = MessageType.error;
             msg.Error = new Error(ErrorCondition.ItemNotFound);
             context.Sender.SendTo(stream, msg);
         }
         else
         {
             //Send
             msg.To   = Member.RealJid;
             msg.From = Member.ResolveRoomJid(msg.From);
             Member.Send(msg);
         }
     }
     else
     {
         msg.SwitchDirection();
         msg.From  = Member.RoomFrom;
         msg.Type  = MessageType.error;
         msg.Error = new Error(ErrorCondition.BadRequest);
         context.Sender.SendTo(stream, msg);
     }
 }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        public override IQ HandleIQ(Streams.XmppStream stream, IQ iq, XmppHandlerContext context)
        {
            Unique unique = (Unique)iq.SelectSingleElement(typeof(Unique));

            if (unique != null)
            {
                // Gen unique id
                unique.Value = UniqueId.CreateNewId(16);
                iq.Type      = IqType.result;
                iq.SwitchDirection();
                return(iq);
            }
            iq.SwitchDirection();
            iq.Type  = IqType.error;
            iq.Error = new Error(ErrorType.cancel, ErrorCondition.ItemNotFound);
            return(iq);
        }
コード例 #4
0
        public override void HandleMessage(Streams.XmppStream stream, Message msg, XmppHandlerContext context)
        {
            User user = (User)msg.SelectSingleElement(typeof(User));

            if (user != null)
            {
                HandleUserMessage(msg, user, stream);
            }
            else
            {
                //Groupchat message
                MucRoomMember member = Room.GetRealMember(msg.From);
                if (member != null && ReferenceEquals(member.Stream, stream) && member.Role != Role.none)
                {
                    if (msg.Type == MessageType.groupchat)
                    {
                        if (msg.Subject != null)
                        {
                            Room.ChangeSubject(member, msg.Subject);
                        }
                        else
                        {
                            MessageBroadcast(msg, member);
                        }
                    }
                    else
                    {
                        msg.SwitchDirection();
                        msg.Type  = MessageType.error;
                        msg.Error = new Error(ErrorCondition.NotAcceptable);
                        context.Sender.SendTo(stream, msg);
                    }
                }
                else
                {
                    msg.SwitchDirection();
                    msg.Type  = MessageType.error;
                    msg.Error = new Error(ErrorCondition.Forbidden);
                    context.Sender.SendTo(stream, msg);
                }
            }
        }
コード例 #5
0
        public override void HandlePresence(Streams.XmppStream stream, Presence presence, XmppHandlerContext context)
        {
            string userName = presence.To.Resource;

            if (!string.IsNullOrEmpty(userName) && presence.Type == PresenceType.available)
            {
                //New member
                MucRoomMember member = Room.GetRealMember(presence.From);
                if (member != null)
                {
                    if (ReferenceEquals(stream, member.Stream))
                    {
                        if (!Room.TryNickChange(presence))
                        {
                            ErrorPresence(presence, ErrorCondition.NotAcceptable);
                            context.Sender.SendTo(stream, presence);
                        }
                    }
                    else
                    {
                        //Conflict. user with this jid already in room
                        ErrorPresence(presence, ErrorCondition.Conflict);
                        context.Sender.SendTo(stream, presence);
                    }
                }
                else
                {
                    //Doesn't exists
                    MucRoomMember newMember = new MucRoomMember(Room, presence.To, presence.From, stream, context);
                    Room.TryEnterRoom(newMember, presence);
                }
            }
            else
            {
                ErrorPresence(presence, ErrorCondition.BadRequest);
                context.Sender.SendTo(stream, presence);
            }
        }