/** * */ package it.yup.util; import java.util.Vector; import it.yup.xml.Element; import it.yup.xmpp.XMPPClient; import it.yup.xmpp.packets.Message; /** * @author luca * */ public class XMPPConsumer extends Thread implements LogConsumer { public String debugJid = "helpMePlease@jabber.bluendo.com"; private static XMPPConsumer consumer = null; private Vector messages = new Vector(); private Vector outGoingMessages = new Vector(); private boolean active = false; public static XMPPConsumer getConsumer() { if (consumer == null) { consumer = new XMPPConsumer(); } return consumer; }; /** * */ public XMPPConsumer() { active = true; start(); } public void run() { while (active) { XMPPClient xmppClient = XMPPClient.getInstance(); synchronized (messages) { try { messages.wait(); while (messages.size() > 0) { String message = (String) messages.elementAt(0); // avoid sending XMPP traffic for infinite recursion // and useless date lake presencehandler if (message.startsWith("[SEND]") || message.startsWith("[RECV]") || message.startsWith("Sender: waiting") || message.startsWith("PresenceHandler")) { ; } else { Message msg = null; msg = new Message(debugJid, "chat"); msg.setBody(message); outGoingMessages.addElement(msg); } messages.removeElementAt(0); } } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } while (outGoingMessages.size() > 0) { if (xmppClient != null && xmppClient.my_jid != null) { try { xmppClient.sendPacket((Element) outGoingMessages .elementAt(0)); outGoingMessages.removeElementAt(0); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } else break; } } } /* (non-Javadoc) * @see it.yup.util.LogConsumer#gotMessage(java.lang.String, int) * */ public void gotMessage(String message, int level) { synchronized (messages) { if (active) { messages.addElement(message); messages.notify(); } } } /* (non-Javadoc) * @see it.yup.util.LogConsumer#setExiting() */ public void setExiting() { this.active = false; } }