Exemple #1
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private void CLIENT_NewMUCMemberPresenceMessage(XMPPClient client, XMPP_API.Classes.Network.Events.NewMUCMemberPresenceMessageEventArgs args)
        {
            string roomJId = Utils.getBareJidFromFullJid(args.mucMemberPresenceMessage.getFrom());

            if (!Equals(roomJId, MUC.chatJabberId))
            {
                return;
            }

            switch (INFO.state)
            {
            case MUCState.ENTERING:
                // Evaluate status codes:
                foreach (MUCPresenceStatusCode statusCode in args.mucMemberPresenceMessage.STATUS_CODES)
                {
                    switch (statusCode)
                    {
                    case MUCPresenceStatusCode.PRESENCE_SELFE_REFERENCE:
                        // Remove event subscription:
                        CLIENT.NewMUCMemberPresenceMessage -= CLIENT_NewMUCMemberPresenceMessage;

                        // Update MUC info:
                        INFO.state = MUCState.ENTERD;
                        saveMUCEnterState();
                        Logger.Info("Entered MUC room '" + roomJId + "' as '" + INFO.nickname + '\'');
                        break;

                    default:
                        break;
                    }
                }
                break;
            }
        }
Exemple #2
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private void C_NewMUCMemberPresenceMessage(XMPPClient client, XMPP_API.Classes.Network.Events.NewMUCMemberPresenceMessageEventArgs args)
        {
            Task.Run(() =>
            {
                MUCMemberPresenceMessage msg = args.mucMemberPresenceMessage;
                string roomJid = Utils.getBareJidFromFullJid(msg.getFrom());
                if (roomJid is null)
                {
                    return;
                }
                string chatId = ChatTable.generateId(roomJid, client.getXMPPAccount().getBareJid());

                MUCOccupantTable member = MUCDBManager.INSTANCE.getMUCOccupant(chatId, msg.FROM_NICKNAME);
                if (member is null)
                {
                    member = new MUCOccupantTable
                    {
                        id       = MUCOccupantTable.generateId(chatId, msg.FROM_NICKNAME),
                        nickname = msg.FROM_NICKNAME,
                        chatId   = chatId
                    };
                }

                member.affiliation = msg.AFFILIATION;
                member.role        = msg.ROLE;
                member.jid         = msg.JID;

                bool isUnavailable = Equals(msg.TYPE, "unavailable");
                if (isUnavailable)
                {
                    if (msg.STATUS_CODES.Contains(MUCPresenceStatusCode.PRESENCE_SELFE_REFERENCE))
                    {
                        // Nickname got changed by user or room:
                        if (msg.STATUS_CODES.Contains(MUCPresenceStatusCode.MEMBER_NICK_CHANGED) || msg.STATUS_CODES.Contains(MUCPresenceStatusCode.ROOM_NICK_CHANGED))
                        {
                            // Update MUC info:
                            MUCDBManager.INSTANCE.setMUCInfoNickname(chatId, msg.NICKNAME, true);

                            // Add new member:
                            MUCDBManager.INSTANCE.setMUCOccupant(new MUCOccupantTable
                            {
                                id          = MUCOccupantTable.generateId(chatId, msg.NICKNAME),
                                nickname    = msg.NICKNAME,
                                chatId      = member.chatId,
                                affiliation = member.affiliation,
                                role        = member.role,
                                jid         = member.jid,
                            }, false, true);
                        }
                        // Occupant got kicked:
                        else if (msg.STATUS_CODES.Contains(MUCPresenceStatusCode.MEMBER_GOT_KICKED))
                        {
                            // Update MUC state:
                            MUCDBManager.INSTANCE.setMUCState(chatId, MUCState.KICKED, true);
                        }
                        else if (msg.STATUS_CODES.Contains(MUCPresenceStatusCode.MEMBER_GOT_BANED))
                        {
                            // Update MUC state:
                            MUCDBManager.INSTANCE.setMUCState(chatId, MUCState.BANED, true);
                        }
                        else
                        {
                            // Update MUC state:
                            MUCDBManager.INSTANCE.setMUCState(chatId, MUCState.DISCONNECTED, true);
                        }
                    }


                    if (msg.STATUS_CODES.Contains(MUCPresenceStatusCode.MEMBER_GOT_KICKED))
                    {
                        // Add kicked chat message:
                        addOccupantKickedMessage(chatId, roomJid, member.nickname);
                    }

                    if (msg.STATUS_CODES.Contains(MUCPresenceStatusCode.MEMBER_GOT_BANED))
                    {
                        // Add baned chat message:
                        addOccupantBanedMessage(chatId, roomJid, member.nickname);
                    }
                }

                // If the type equals 'unavailable', a user left the room:
                MUCDBManager.INSTANCE.setMUCOccupant(member, isUnavailable, true);
            });
        }