/* * TeleStax, Open Source Cloud Communications * Copyright 2011-2016, Telestax Inc and individual contributors * by the @authors tag. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.restcomm.media.bootstrap.ioc; import org.restcomm.media.bootstrap.ioc.provider.AudioPlayerFactoryProvider; import org.restcomm.media.bootstrap.ioc.provider.AudioPlayerPoolProvider; import org.restcomm.media.bootstrap.ioc.provider.AudioRecorderFactoryProvider; import org.restcomm.media.bootstrap.ioc.provider.AudioRecorderPoolProvider; import org.restcomm.media.bootstrap.ioc.provider.CachedRemoteStreamProvider; import org.restcomm.media.bootstrap.ioc.provider.DirectRemoteStreamProvider; import org.restcomm.media.bootstrap.ioc.provider.DtlsSrtpServerProviderProvider; import org.restcomm.media.bootstrap.ioc.provider.DtmfDetectorFactoryProvider; import org.restcomm.media.bootstrap.ioc.provider.DtmfDetectorPoolProvider; import org.restcomm.media.bootstrap.ioc.provider.DtmfGeneratorFactoryProvider; import org.restcomm.media.bootstrap.ioc.provider.DtmfGeneratorPoolProvider; import org.restcomm.media.bootstrap.ioc.provider.MediaSchedulerProvider; import org.restcomm.media.bootstrap.ioc.provider.TaskSchedulerProvider; import org.restcomm.media.bootstrap.ioc.provider.UdpManagerProvider; import org.restcomm.media.bootstrap.ioc.provider.WallClockProvider; import org.restcomm.media.bootstrap.ioc.provider.AudioPlayerFactoryProvider.AudioPlayerFactoryType; import org.restcomm.media.bootstrap.ioc.provider.AudioPlayerPoolProvider.AudioPlayerPoolType; import org.restcomm.media.bootstrap.ioc.provider.AudioRecorderFactoryProvider.AudioRecorderFactoryType; import org.restcomm.media.bootstrap.ioc.provider.AudioRecorderPoolProvider.AudioRecorderPoolType; import org.restcomm.media.bootstrap.ioc.provider.DtmfDetectorFactoryProvider.DtmfDetectorFactoryType; import org.restcomm.media.bootstrap.ioc.provider.DtmfDetectorPoolProvider.DtmfDetectorPoolType; import org.restcomm.media.bootstrap.ioc.provider.DtmfGeneratorFactoryProvider.DtmfGeneratorFactoryType; import org.restcomm.media.bootstrap.ioc.provider.DtmfGeneratorPoolProvider.DtmfGeneratorPoolType; import org.restcomm.media.bootstrap.ioc.provider.mgcp.Mgcp2ControllerProvider; import org.restcomm.media.core.configuration.MediaServerConfiguration; import org.restcomm.media.network.deprecated.UdpManager; import org.restcomm.media.resource.player.audio.RemoteStreamProvider; import org.restcomm.media.rtp.crypto.DtlsSrtpServerProvider; import org.restcomm.media.scheduler.Clock; import org.restcomm.media.scheduler.PriorityQueueScheduler; import org.restcomm.media.scheduler.Scheduler; import org.restcomm.media.spi.ServerManager; import com.google.inject.AbstractModule; import com.google.inject.Provider; import com.google.inject.Singleton; /** * @author Henrique Rosa (henrique.rosa@telestax.com) * */ public class CoreModule extends AbstractModule { private final MediaServerConfiguration config; public CoreModule(MediaServerConfiguration config) { this.config = config; } @Override protected void configure() { bind(MediaServerConfiguration.class).toInstance(this.config); bind(Clock.class).toProvider(WallClockProvider.class).in(Singleton.class); bind(PriorityQueueScheduler.class).toProvider(MediaSchedulerProvider.class).in(Singleton.class); bind(Scheduler.class).toProvider(TaskSchedulerProvider.class).in(Singleton.class); bind(UdpManager.class).toProvider(UdpManagerProvider.class).in(Singleton.class); bind(AudioPlayerFactoryType.INSTANCE).toProvider(AudioPlayerFactoryProvider.class).in(Singleton.class); bind(AudioPlayerPoolType.INSTANCE).toProvider(AudioPlayerPoolProvider.class).in(Singleton.class); bind(AudioRecorderFactoryType.INSTANCE).toProvider(AudioRecorderFactoryProvider.class).in(Singleton.class); bind(AudioRecorderPoolType.INSTANCE).toProvider(AudioRecorderPoolProvider.class).in(Singleton.class); bind(DtmfDetectorFactoryType.INSTANCE).toProvider(DtmfDetectorFactoryProvider.class).in(Singleton.class); bind(DtmfDetectorPoolType.INSTANCE).toProvider(DtmfDetectorPoolProvider.class).in(Singleton.class); bind(DtmfGeneratorFactoryType.INSTANCE).toProvider(DtmfGeneratorFactoryProvider.class).in(Singleton.class); bind(DtmfGeneratorPoolType.INSTANCE).toProvider(DtmfGeneratorPoolProvider.class).in(Singleton.class); bind(ServerManager.class).toProvider(Mgcp2ControllerProvider.class).in(Singleton.class); bind(DtlsSrtpServerProvider.class).toProvider(DtlsSrtpServerProviderProvider.class).in(Singleton.class); Class<? extends Provider<? extends RemoteStreamProvider>> remoteStreamProvider; if (this.config.getResourcesConfiguration().getPlayerCacheEnabled()) { remoteStreamProvider = CachedRemoteStreamProvider.class; } else { remoteStreamProvider = DirectRemoteStreamProvider.class; } bind(RemoteStreamProvider.class).toProvider(remoteStreamProvider).in(Singleton.class); } }