From d3e5f492ce903945283af485843f8162bbada81c Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Sat, 17 Oct 2009 00:16:15 +0000 Subject: [PATCH] Delays the starting of a thread in the MSN protocol implementation until it's actually needed. --- .../impl/protocol/msn/EventManager.java | 86 +++++++++++-------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java b/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java index c4dad529d..0ddce7577 100644 --- a/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java +++ b/src/net/java/sip/communicator/impl/protocol/msn/EventManager.java @@ -8,6 +8,8 @@ import java.util.*; +import net.java.sip.communicator.util.*; +import net.java.sip.communicator.service.protocol.*; import net.sf.jml.*; import net.sf.jml.impl.*; import net.sf.jml.net.*; @@ -15,13 +17,8 @@ import net.sf.jml.protocol.*; import net.sf.jml.protocol.incoming.*; -import net.java.sip.communicator.util.*; -import net.java.sip.communicator.service.protocol.*; - - /** - * Manager which listens for changing of the contact list - * and fires some events + * Manager which listens for changing of the contact list and fires some events. * * @author Damian Minkov */ @@ -30,18 +27,29 @@ public class EventManager { private static final Logger logger = Logger.getLogger(EventManager.class); - private BasicMessenger msnMessenger = null; - private Vector listeners + private boolean connected = false; + + private Timer connectionTimer; + + private final List listeners = new Vector(); + private final BasicMessenger msnMessenger; + /** * The provider that is on top of us. */ - private ProtocolProviderServiceMsnImpl msnProvider = null; + private final ProtocolProviderServiceMsnImpl msnProvider; /** - * Creates the manager - * @param msnMessenger BasicMessenger the messenger + * Initializes a new EventManager instance which is to manage the + * events of a specific BasicMessenger as part of its operation for + * the purposes of a specific ProtocolProviderServiceMsnImpl. + * + * @param msnProvider the ProtocolProviderServiceMsnImpl which is + * the creator of the new instance + * @param msnMessenger the BasicMessenger which is to have its + * events managed by the new instance */ public EventManager(ProtocolProviderServiceMsnImpl msnProvider, BasicMessenger msnMessenger) @@ -60,7 +68,8 @@ public void addModificationListener(MsnContactListEventListener listener) { synchronized(listeners) { - listeners.add(listener); + if (!listeners.contains(listener)) + listeners.add(listener); } } @@ -134,11 +143,21 @@ else if(incoming instanceof IncomingQNG) } } - private boolean connected = false; - private Timer connectionTimer = new Timer(); - public void sessionTimeout(Session socketSession) throws Exception { + Timer connectionTimer; + + /* + * Delays the creation of Timer because it immediately starts a new + * Thread while it may not be necessary at all. + */ + synchronized (this) + { + if (this.connectionTimer == null) + this.connectionTimer = new Timer(); + connectionTimer = this.connectionTimer; + } + connectionTimer.schedule(new TimerTask() { public void run() @@ -159,12 +178,10 @@ public void run() */ private void fireMessageDelivered(int transactionID) { - synchronized(listeners){ - Iterator iter = listeners.iterator(); - while (iter.hasNext()) - { - iter.next().messageDelivered(transactionID); - } + synchronized(listeners) + { + for (MsnContactListEventListener listener : listeners) + listener.messageDelivered(transactionID); } } @@ -174,12 +191,10 @@ private void fireMessageDelivered(int transactionID) */ private void fireMessageDeliveredFailed(int transactionID) { - synchronized(listeners){ - Iterator iter = listeners.iterator(); - while (iter.hasNext()) - { - iter.next().messageDeliveredFailed(transactionID); - } + synchronized(listeners) + { + for (MsnContactListEventListener listener : listeners) + listener.messageDeliveredFailed(transactionID); } } @@ -189,12 +204,10 @@ private void fireMessageDeliveredFailed(int transactionID) */ private void fireGroupRenamed(MsnGroup group) { - synchronized(listeners){ - Iterator iter = listeners.iterator(); - while (iter.hasNext()) - { - iter.next().groupRenamed(group); - } + synchronized(listeners) + { + for (MsnContactListEventListener listener : listeners) + listener.groupRenamed(group); } } @@ -205,11 +218,8 @@ private void fireLoggingFromOtherLocation() { synchronized (listeners) { - Iterator iter = listeners.iterator(); - while (iter.hasNext()) - { - iter.next().loggingFromOtherLocation(); - } + for (MsnContactListEventListener listener : listeners) + listener.loggingFromOtherLocation(); } } }