public void MucMessagesTest() { var room1 = new Jid("a.conf@s"); var room2 = new Jid("b.conf@s"); var m1 = new Message(new Jid("to1"), new Jid("from2"), "1"); var m2 = new Message(new Jid("to2"), new Jid("from2"), "2"); store.AddMucMessages(room1, new[] { m1, m2 }); var mess = store.GetMucMessages(room2, 0); Assert.AreEqual(0, mess.Count); mess = store.GetMucMessages(room1, 0); Assert.AreEqual(2, mess.Count); Assert.AreEqual("1", mess[0].Body); Assert.AreEqual("2", mess[1].Body); mess = store.GetMucMessages(room1, 1); Assert.AreEqual(1, mess.Count); Assert.AreEqual("2", mess[0].Body); store.RemoveMucMessages(room1); mess = store.GetMucMessages(room1, 1); Assert.AreEqual(0, mess.Count); }
public override IQ HandleIQ(XmppStream stream, IQ iq, XmppHandlerContext context) { //Admins iq //New member MucRoomMember member = Room.GetRealMember(iq.From); if (member != null) { if (iq.Query != null) { if (iq.Query is Admin && (member.Affiliation == Affiliation.admin || member.Affiliation == Affiliation.owner)) { Room.AdminCommand(iq, member); } else if (iq.Query is Owner && (member.Affiliation == Affiliation.owner)) { Room.OwnerCommand(iq, member); } else if (iq.Query is Core.protocol.x.tm.history.History && iq.Type == IqType.get) { Jid jid = iq.To; var mucStore = new DbMucStore(); var properties = new Dictionary <string, string>(1) { { "connectionStringName", "core" } }; mucStore.Configure(properties); var history = (Core.protocol.x.tm.history.History)iq.Query; foreach (var msg in mucStore.GetMucMessages(jid, history.Count, history.StartIndex)) { if (msg == null) { continue; } history.AddChild(HistoryItem.FromMessage(msg)); } iq.Type = IqType.result; iq.SwitchDirection(); return(iq); } else { XmppStanzaError.ToForbidden(iq); } } else { XmppStanzaError.ToBadRequest(iq); } } else { XmppStanzaError.ToForbidden(iq); } if (!iq.Switched) { iq.SwitchDirection(); } iq.From = Room.Jid; return(iq); }