Esempio n. 1
0
 private async Task SendMucLeaveMessageAsync(XMPPClient client, MucInfoModel info)
 {
     string           from = client.getXMPPAccount().getFullJid();
     string           to   = info.chat.bareJid + '/' + info.nickname;
     LeaveRoomMessage msg  = new LeaveRoomMessage(from, to);
     await client.SendAsync(msg);
 }
Esempio n. 2
0
        public async Task EnterMucAsync(XMPPClient client, MucInfoModel info)
        {
            MucJoinHelper helper = new MucJoinHelper(client, info);

            TIMED_LIST.AddTimed(helper);

            await helper.EnterRoomAsync();
        }
 private void UpdateView(MucInfoModel mucInfo)
 {
     MODEL.EnterMucAvailable = mucInfo.state != MucState.ENTERD && mucInfo.state != MucState.ENTERING;
     if (!string.IsNullOrEmpty(mucInfo.name))
     {
         MODEL.MucName          = mucInfo.name;
         MODEL.DifferentMucName = !string.Equals(mucInfo.chat.bareJid, MODEL.MucName);
     }
 }
Esempio n. 4
0
 private void OnMucChanged(MucInfoModel muc)
 {
     if (muc is not null && MODEL.chat is not null && muc.state == MucState.ENTERD && muc.affiliation == MUCAffiliation.OWNER)
     {
         MODEL.IsAvailable = true;
         RequestConfiguartion(MODEL.chat);
         return;
     }
     MODEL.IsAvailable = false;
 }
Esempio n. 5
0
        private async Task AddMucAsync(Client client, string roomBareJid, string nickname, string password, bool bookmark, bool autoJoin)
        {
            ChatModel chat = new ChatModel(roomBareJid, client.dbAccount)
            {
                chatType     = ChatType.MUC,
                inRoster     = bookmark,
                subscription = "none",
                isChatActive = true
            };
            MucInfoModel muc = new MucInfoModel()
            {
                chat          = chat,
                subject       = null,
                autoEnterRoom = autoJoin,
                name          = null,
                nickname      = nickname,
                password      = string.IsNullOrEmpty(password) ? null : password,
                state         = MucState.DISCONNECTED
            };

            chat.muc = muc;
            SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock();

            semaLock.Wait();
            DataCache.INSTANCE.AddChatUnsafe(chat, client);
            semaLock.Dispose();

            if (muc.autoEnterRoom)
            {
                await MucHandler.INSTANCE.EnterMucAsync(client.xmppClient, muc);
            }

            if (bookmark)
            {
                List <ConferenceItem> conferenceItems;
                using (MainDbContext ctx = new MainDbContext())
                {
                    conferenceItems = ctx.GetXEP0048ConferenceItemsForAccount(client.dbAccount.bareJid);
                }
                MessageResponseHelperResult <IQMessage> result = await client.xmppClient.PUB_SUB_COMMAND_HELPER.setBookmars_xep_0048Async(conferenceItems);

                if (result.STATE == MessageResponseHelperResultState.SUCCESS)
                {
                    if (result.RESULT is IQErrorMessage errMsg)
                    {
                        Logger.Warn("Failed to set bookmarks: " + errMsg.ToString());
                    }
                }
                else
                {
                    Logger.Warn("Failed to set bookmarks: " + result.STATE);
                }
            }
        }
Esempio n. 6
0
        public async Task LeaveRoomAsync(XMPPClient client, MucInfoModel info)
        {
            StopMucJoinHelper(info.chat);
            info.state = MucState.DISCONNECTING;
            using (MainDbContext ctx = new MainDbContext())
            {
                ctx.Update(info);
            }
            await SendMucLeaveMessageAsync(client, info);

            info.state = MucState.DISCONNECTED;
            using (MainDbContext ctx = new MainDbContext())
            {
                ctx.Update(info);
            }
        }
Esempio n. 7
0
        private async Task AddMucAsync(Client client, string roomBareJid, string nickname, string password, bool bookmark, bool autoJoin)
        {
            ChatModel chat = new ChatModel(roomBareJid, client.dbAccount)
            {
                chatType     = ChatType.MUC,
                inRoster     = bookmark,
                subscription = "none",
                isChatActive = true
            };
            MucInfoModel muc = new MucInfoModel()
            {
                chat          = chat,
                subject       = null,
                autoEnterRoom = autoJoin,
                name          = null,
                nickname      = nickname,
                password      = string.IsNullOrEmpty(password) ? null : password,
                state         = MucState.DISCONNECTED
            };

            chat.muc = muc;
            SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock();

            semaLock.Wait();
            DataCache.INSTANCE.AddChatUnsafe(chat, client);
            semaLock.Dispose();

            if (muc.autoEnterRoom)
            {
                await MucHandler.INSTANCE.EnterMucAsync(client.xmppClient, muc);
            }

            if (bookmark)
            {
                await client.PublishBookmarksAsync();
            }
        }
Esempio n. 8
0
 //--------------------------------------------------------Constructor:----------------------------------------------------------------\\
 #region --Constructors--
 public MucJoinHelper(XMPPClient client, MucInfoModel info)
 {
     CLIENT = client;
     INFO   = info;
 }