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); }
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); } }
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; }
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); } } }
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); } }
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(); } }
//--------------------------------------------------------Constructor:----------------------------------------------------------------\\ #region --Constructors-- public MucJoinHelper(XMPPClient client, MucInfoModel info) { CLIENT = client; INFO = info; }