package org.limewire.xmpp.client; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; import org.limewire.concurrent.ExecutorsHelper; import org.limewire.friend.api.FileOfferEvent; import org.limewire.friend.api.FriendRequestEvent; import org.limewire.friend.api.RosterEvent; import org.limewire.friend.impl.LimeWireFriendXmppModule; import org.limewire.listener.AsynchronousMulticasterImpl; import org.limewire.listener.BroadcastPolicy; import org.limewire.listener.CachingEventMulticasterImpl; import org.limewire.listener.EventBroadcaster; import org.limewire.listener.EventMulticaster; import org.limewire.listener.EventMulticasterImpl; import org.limewire.listener.ListenerSupport; import org.limewire.listener.AsynchronousEventBroadcaster; import org.limewire.xmpp.activity.XmppActivityEvent; import org.limewire.xmpp.api.client.JabberSettings; import org.limewire.xmpp.client.impl.ConnectionConfigurationFactory; import org.limewire.xmpp.client.impl.DNSConnectionConfigurationFactory; import org.limewire.xmpp.client.impl.FallbackConnectionConfigurationFactory; import org.limewire.xmpp.client.impl.XMPPConnectionFactoryImpl; import org.limewire.xmpp.client.impl.XMPPConnectionImplFactory; import org.limewire.xmpp.client.impl.XMPPFriendConnectionImpl; import org.limewire.xmpp.client.impl.IdleTime; import org.limewire.xmpp.client.impl.IdleTimeImpl; import org.limewire.xmpp.client.impl.IdleStatusMonitor; import org.limewire.xmpp.client.impl.IdleStatusMonitorFactory; import org.limewire.xmpp.client.impl.messages.address.AddressIQListener; import org.limewire.xmpp.client.impl.messages.address.AddressIQListenerFactory; import org.limewire.xmpp.client.impl.messages.authtoken.AuthTokenIQListener; import org.limewire.xmpp.client.impl.messages.authtoken.AuthTokenIQListenerFactory; import org.limewire.xmpp.client.impl.messages.connectrequest.ConnectBackRequestIQListener; import org.limewire.xmpp.client.impl.messages.connectrequest.ConnectBackRequestIQListenerFactory; import org.limewire.xmpp.client.impl.messages.filetransfer.FileTransferIQListener; import org.limewire.xmpp.client.impl.messages.filetransfer.FileTransferIQListenerFactory; import org.limewire.xmpp.client.impl.messages.library.LibraryChangedIQListener; import org.limewire.xmpp.client.impl.messages.library.LibraryChangedIQListenerFactory; import com.google.inject.AbstractModule; import com.google.inject.TypeLiteral; import com.google.inject.assistedinject.FactoryProvider; public class LimeWireXMPPModule extends AbstractModule { private final Class<? extends JabberSettings> jabberSettingsClass; public LimeWireXMPPModule(Class<? extends JabberSettings> jabberSettingsClass) { this.jabberSettingsClass = jabberSettingsClass; } @Override protected void configure() { install(new LimeWireFriendXmppModule()); if(jabberSettingsClass != null) { bind(JabberSettings.class).to(jabberSettingsClass); } bind(XMPPConnectionFactoryImpl.class); Executor executor = ExecutorsHelper.newProcessingQueue("XMPPEventThread"); AsynchronousMulticasterImpl<RosterEvent> rosterMulticaster = new AsynchronousMulticasterImpl<RosterEvent>(executor); bind(new TypeLiteral<AsynchronousEventBroadcaster<RosterEvent>>(){}).toInstance(rosterMulticaster); bind(new TypeLiteral<ListenerSupport<RosterEvent>>(){}).toInstance(rosterMulticaster); EventMulticaster<FileOfferEvent> fileOfferMulticaster = new EventMulticasterImpl<FileOfferEvent>(); bind(new TypeLiteral<EventBroadcaster<FileOfferEvent>>(){}).toInstance(fileOfferMulticaster); bind(new TypeLiteral<ListenerSupport<FileOfferEvent>>(){}).toInstance(fileOfferMulticaster); EventMulticaster<FriendRequestEvent> friendRequestMulticaster = new EventMulticasterImpl<FriendRequestEvent>(); bind(new TypeLiteral<EventBroadcaster<FriendRequestEvent>>(){}).toInstance(friendRequestMulticaster); bind(new TypeLiteral<ListenerSupport<FriendRequestEvent>>(){}).toInstance(friendRequestMulticaster); EventMulticaster<XmppActivityEvent> activityMulticaster = new CachingEventMulticasterImpl<XmppActivityEvent>(BroadcastPolicy.IF_NOT_EQUALS); bind(new TypeLiteral<EventBroadcaster<XmppActivityEvent>>(){}).toInstance(activityMulticaster); bind(new TypeLiteral<ListenerSupport<XmppActivityEvent>>(){}).toInstance(activityMulticaster); List<ConnectionConfigurationFactory> connectionConfigurationFactories = new ArrayList<ConnectionConfigurationFactory>(2); connectionConfigurationFactories.add(new DNSConnectionConfigurationFactory()); connectionConfigurationFactories.add(new FallbackConnectionConfigurationFactory()); bind(new TypeLiteral<List<ConnectionConfigurationFactory>>(){}).toInstance(connectionConfigurationFactories); bind(XMPPConnectionImplFactory.class).toProvider(FactoryProvider.newFactory(XMPPConnectionImplFactory.class, XMPPFriendConnectionImpl.class)); bind(AddressIQListenerFactory.class).toProvider(FactoryProvider.newFactory(AddressIQListenerFactory.class, AddressIQListener.class)); bind(AuthTokenIQListenerFactory.class).toProvider(FactoryProvider.newFactory(AuthTokenIQListenerFactory.class, AuthTokenIQListener.class)); bind(ConnectBackRequestIQListenerFactory.class).toProvider(FactoryProvider.newFactory(ConnectBackRequestIQListenerFactory.class, ConnectBackRequestIQListener.class)); bind(LibraryChangedIQListenerFactory.class).toProvider(FactoryProvider.newFactory(LibraryChangedIQListenerFactory.class, LibraryChangedIQListener.class)); bind(FileTransferIQListenerFactory.class).toProvider(FactoryProvider.newFactory(FileTransferIQListenerFactory.class, FileTransferIQListener.class)); bind(IdleTime.class).to(IdleTimeImpl.class); bind(IdleStatusMonitorFactory.class).toProvider( FactoryProvider.newFactory( IdleStatusMonitorFactory.class, IdleStatusMonitor.class)); } }