/// <summary> /// Sends an iq, message, or presence message /// </summary> /// <param name="iq"></param> public void SendXMPP(XMPPMessageBase iq) { try { XMPPConnection.Send(iq.MessageXML); } catch (Exception ex) { LogMessage("Exception sending XMPP class: {0}", ex); throw new Exception("Exception sending XMPP class", ex); } }
protected virtual void XMPPConnection_OnStanzaReceived(XMPPStanza stanza, object objFrom) { bool bHandled = false; /// See if any of our handlers /// List <Logic> RemoveList = new List <Logic>(); lock (LogicLock) { foreach (Logic log in ActiveServices) { bHandled = log.NewXMLFragment(stanza); if (log.IsCompleted == true) { RemoveList.Add(log); } if (bHandled == true) { break; } } foreach (Logic log in RemoveList) { ActiveServices.Remove(log); } } if (bHandled == true) { return; } /// Now see if this stanza is a higher level IQ or message /// try { XElement elem = XElement.Parse(stanza.XML); XMPPMessageBase msg = null; if (elem.Name == "iq") { msg = XMPPMessageFactory.BuildIQ(elem, stanza.XML); } else if (elem.Name == "message") { msg = XMPPMessageFactory.BuildMessage(elem, stanza.XML); } else if (elem.Name == "presence") { msg = XMPPMessageFactory.BuildPresence(elem, stanza.XML); //msg = new PresenceMessage(stanza.XML); } /// TODO.. log IQ, MESSAGE or PRESENCE event, maybe have an event handler /// if (msg != null) { if (msg is IQ) { bHandled = OnIQ(msg as IQ); } else if (msg is Message) { bHandled = OnMessage(msg as Message); } else if (msg is PresenceMessage) { bHandled = OnPresence(msg as PresenceMessage); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } if (bHandled == true) { return; } }