private static XmlElement CreateMessageStanza(Jid recipientJid, Message message) { var type = message.Type.ToString().ToLower(); return(MessageStanza.New(type, message.Subject, message.Body) .NewId() .To(recipientJid)); }
public void JabberMessageHandler(MessageStanza message) { XmlNodeList delayedNode = message.XmlDoc.GetElementsByTagName("delay"); bool delayed = (delayedNode != null) && (delayedNode.Count != 0); if (message.Body != null && !delayed) { switch (message.Type) { case "groupchat": foreach (String s in message.Body.Values) { if (s.StartsWith("##")) { ParseKrakenDiscovery(message.FromResource, s); } if ("#discover".Equals(s)) { /* there was a discovery, cache its date */ LastDiscovery = DateTime.Now; } } break; case "normal": case "chat": foreach (string s in message.Body.Values) { //Log.AddMessage("Jabber", "From: <" + message.FromResource + "> " + s); lock (Connections) { if (Connections.ContainsKey(message.FromResource)) { Connections[message.FromResource].HandleMessage(s); } } } break; } } }
void mainLoop() { DateTime time = DateTime.Now; while (true) { string msgReceived = null; if (DateTime.Now.Subtract(time).TotalSeconds > 60) { Ping(); time = DateTime.Now; } try { msgReceived = connection.Receive(200); } catch (IOException ioe) { connection.Disconnect(); if (ConnectionStatusHandler != null) { ConnectionStatusHandler(false); } return; } if (msgReceived == "</stream:stream>") { //Console.WriteLine("TODO: Close connection and thread!"); connection.Disconnect(); if (ConnectionStatusHandler != null) { ConnectionStatusHandler(false); } return; } else if (msgReceived != null) { // process message XmlDocument xdoc = new XmlDocument(); try { xdoc.LoadXml(msgReceived); if (xdoc != null) { switch (xdoc.FirstChild.Name) { case "message": { if (MessageHandler != null) { MessageStanza message = new MessageStanza(msgReceived); if (message != null) { MessageHandler(message); } } break; } case "presence": { if (PresenceHandler != null) { PresenceStanza presence = new PresenceStanza(msgReceived); if (presence != null) { PresenceHandler(presence); } } break; } default: { MessageStanza message = new MessageStanza(); message.From = "MessageListener"; message.Body = new System.Collections.Hashtable(); message.Body.Add("", "Unknown message: \"" + msgReceived + "\""); if (message != null) { MessageHandler(message); } break; } } } } catch (Exception e) { Console.WriteLine("Error loading message: \"" + msgReceived + "\""); } //Console.WriteLine (msgReceived); } if (DialogEnabled) { lock ((Object)threadWaiting) { threadWaiting = true; } while (DialogEnabled) { Thread.Sleep(200); } lock ((Object)threadWaiting) { threadWaiting = false; } } } }