package tv.dyndns.kishibe.qmaclone.server;
import static com.google.inject.Scopes.SINGLETON;
import static com.google.inject.name.Names.named;
import com.google.gwt.logging.server.RemoteLoggingServiceImpl;
import com.google.inject.AbstractModule;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.sun.jna.Native;
import tv.dyndns.kishibe.qmaclone.server.database.DatabaseModule;
import tv.dyndns.kishibe.qmaclone.server.handwriting.Recognizable;
import tv.dyndns.kishibe.qmaclone.server.handwriting.RecognizerZinnia;
import tv.dyndns.kishibe.qmaclone.server.handwriting.ZinniaLibrary;
import tv.dyndns.kishibe.qmaclone.server.handwriting.ZinniaObjectFactory;
import tv.dyndns.kishibe.qmaclone.server.image.ImageLinkChecker;
import tv.dyndns.kishibe.qmaclone.server.image.ImageUtils;
import tv.dyndns.kishibe.qmaclone.server.relevance.RelevanceModule;
import tv.dyndns.kishibe.qmaclone.server.service.LinkServletStub;
import tv.dyndns.kishibe.qmaclone.server.sns.SnsClient;
import tv.dyndns.kishibe.qmaclone.server.sns.SnsClients;
import tv.dyndns.kishibe.qmaclone.server.util.DownloaderModule;
import tv.dyndns.kishibe.qmaclone.server.websocket.WebSocketModule;
public class QMACloneModule extends AbstractModule {
@Override
protected void configure() {
bind(ChatManager.class).in(SINGLETON);
bind(NormalModeProblemManager.class).in(SINGLETON);
bind(ThemeModeProblemManager.class).in(SINGLETON);
bind(GameManager.class).in(SINGLETON);
bind(ServerStatusManager.class).in(SINGLETON);
bind(BadUserDetector.class).in(SINGLETON);
bind(ProblemCorrectCounterResetCounter.class).in(SINGLETON);
bind(ProblemIndicationCounter.class).in(SINGLETON);
bind(RestrictedUserUtils.class).in(SINGLETON);
bind(ChatPostCounter.class).in(SINGLETON);
bind(PlayerHistoryManager.class).in(SINGLETON);
bind(VoteManager.class).in(SINGLETON);
bind(Recognizable.class).to(RecognizerZinnia.class).in(SINGLETON);
bind(ThemeModeEditorManager.class).in(SINGLETON);
bind(ImageUtils.class).in(SINGLETON);
bind(PrefectureRanking.class).in(SINGLETON);
bind(RatingDistribution.class).in(SINGLETON);
install(new FactoryModuleBuilder().build(Game.Factory.class));
install(new FactoryModuleBuilder().build(ComputerPlayer.Factory.class));
install(new FactoryModuleBuilder().build(PlayerAnswer.Factory.class));
bind(RemoteLoggingServiceImpl.class).in(SINGLETON);
bind(ZinniaLibrary.class)
.toInstance((ZinniaLibrary) Native.loadLibrary("zinnia", ZinniaLibrary.class));
bind(ZinniaObjectFactory.class).in(SINGLETON);
bind(SnsClient.class).annotatedWith(named("SnsClients")).to(SnsClients.class);
bind(ThreadPool.class).in(SINGLETON);
install(new FactoryModuleBuilder().build(ImageLinkChecker.Factory.class));
bind(ServiceServletStub.class).in(SINGLETON);
bind(LinkServletStub.class).in(SINGLETON);
bind(StatsServletStub.class).in(SINGLETON);
bind(IconUploadServletStub.class).in(SINGLETON);
bind(RssServletStub.class).in(SINGLETON);
bind(ImageProxyServletStub.class).in(SINGLETON);
bind(StatsServletStub.class).in(SINGLETON);
bind(RemoteLoggingServlet.class).in(SINGLETON);
install(new DatabaseModule());
install(new RelevanceModule());
install(new DownloaderModule());
install(new WebSocketModule());
}
}