Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
    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;
            }
        }
    }
Exemplo n.º 3
0
        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;
                    }
                }
            }
        }