/**
TwitStreet - Twitter Stock Market Game
Copyright (C) 2012 Engin Guller (bisanthe@gmail.com), Cagdas Ozek (cagdasozek@gmail.com)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
package com.twitstreet.main;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletContext;
import org.apache.log4j.Logger;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.twitstreet.config.ConfigMgr;
import com.twitstreet.db.base.DBMgr;
import com.twitstreet.market.StockMgr;
import com.twitstreet.season.SeasonMgr;
import com.twitstreet.session.GroupMgr;
import com.twitstreet.session.UserMgr;
import com.twitstreet.task.AutoPlayerTask;
import com.twitstreet.task.DetectInvalidTokensTask;
import com.twitstreet.task.NewSeasonInfoSentTask;
import com.twitstreet.task.NewSeasonTask;
import com.twitstreet.task.StockUpdateTask;
import com.twitstreet.task.TruncateHistoryTask;
import com.twitstreet.task.TruncateLogsTask;
import com.twitstreet.task.UserInfoUpdateTask;
import com.twitstreet.twitter.AdsListenerMgr;
import com.twitstreet.twitter.AnnouncerMgr;
import com.twitstreet.twitter.FollowBackMgr;
import com.twitstreet.twitter.Welcome2ListenerMgr;
@Singleton
public class TwitstreetImpl implements Twitstreet {
private boolean initialized = false;
private static Logger logger = Logger.getLogger(TwitstreetImpl.class);
DBMgr dbMgr;
ConfigMgr configMgr;
ServletContext servletContext;
Injector injector;
@Inject
GroupMgr groupMgr;
@Inject
UserMgr userMgr;
@Inject
SeasonMgr seasonMgr;
@Inject
StockMgr stockMgr;
@Inject
AnnouncerMgr announcerMgr;
@Inject
AdsListenerMgr adsListenerMgr;
@Inject
Welcome2ListenerMgr welcome2ListenerMgr;
@Inject
FollowBackMgr followBackMgr;
@Inject
public TwitstreetImpl(DBMgr dbMgr, ConfigMgr configMgr) {
this.dbMgr = dbMgr;
this.configMgr = configMgr;
}
@Override
public void initialize() {
loadConfiguration();
startTasks();
initialized = true;
}
private void loadConfiguration() {
Properties properties = new Properties();
try {
properties.load(new FileReader(new File(
Twitstreet.TWITSTREET_PROPERTIES)));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String dbHost = properties.getProperty(Twitstreet.DB_HOST);
String dbAdmin = properties.getProperty(Twitstreet.DB_ADMIN);
String dbPassword = properties.getProperty(Twitstreet.DB_PASSWORD);
String dbName = properties.getProperty(Twitstreet.DATABASE);
String dbPortStr = properties.getProperty(Twitstreet.DB_PORT);
String mailDealer = properties.getProperty(Twitstreet.MAIL_DEALER);
String mailDealerPassword = properties
.getProperty(Twitstreet.MAIL_DEALER_PWD);
String mailRecipients = properties
.getProperty(Twitstreet.MAIL_RECIPIENTS);
boolean dev = properties.getProperty(ConfigMgr.STAGE) == null ? true
: properties.getProperty(ConfigMgr.STAGE).equalsIgnoreCase(
ConfigMgr.DEV);
int dbPort = Integer.parseInt(dbPortStr);
dbMgr.setDbHost(dbHost);
dbMgr.setUserName(dbAdmin);
dbMgr.setPassword(dbPassword);
dbMgr.setDbName(dbName);
dbMgr.setDbPort(dbPort);
dbMgr.init();
configMgr.load();
configMgr.setDev(dev);
configMgr.setMailDealer(mailDealer);
configMgr.setMailDealerPassword(mailDealerPassword);
configMgr.setMailRecipients(mailRecipients.split(","));
}
private void startTasks() {
startStockUpdateTask();
startUserInfoUpdateTask();
startAutoPlayerTask();
if (!configMgr.isDev()) {
startNewSeasonTask();
startTruncateHistoryTask();
startDetectInvalidTokensTask();
//Do not send advertisements any more.
//adsListenerMgr.start();
//Do not announce new seasons.
//startNewSeasonInfoSentTask();
//welcome2ListenerMgr.start();
//followBackMgr.start();
}
}
private void startAutoPlayerTask() {
AutoPlayerTask autoPlayerTask = injector
.getInstance(AutoPlayerTask.class);
Thread autoPlayerTaskThread = new Thread(autoPlayerTask);
autoPlayerTaskThread.setName("Auto Player Task Thread");
autoPlayerTaskThread.start();
}
private void startNewSeasonTask() {
NewSeasonTask newSeasonTask = injector.getInstance(NewSeasonTask.class);
Thread newSeasonTaskThread = new Thread(newSeasonTask);
newSeasonTaskThread.setName("Start New Season Task");
newSeasonTaskThread.start();
}
private void startNewSeasonInfoSentTask() {
NewSeasonInfoSentTask newSeasonInfoSentTask = injector
.getInstance(NewSeasonInfoSentTask.class);
Thread newSeasonInfoSentThread = new Thread(newSeasonInfoSentTask);
newSeasonInfoSentThread.setName("New Season Info Sent Task");
newSeasonInfoSentThread.start();
}
private void startDetectInvalidTokensTask() {
DetectInvalidTokensTask detectInvalidTokensTask = injector
.getInstance(DetectInvalidTokensTask.class);
Thread detectInvalidTokensThread = new Thread(detectInvalidTokensTask);
detectInvalidTokensThread.setName("Detect Invalid Tokens Task");
detectInvalidTokensThread.start();
}
private void startUserInfoUpdateTask() {
UserInfoUpdateTask userInfoUpdateTask = injector
.getInstance(UserInfoUpdateTask.class);
Thread updateUserInfoThread = new Thread(userInfoUpdateTask);
updateUserInfoThread.setName("User Info Update Task");
updateUserInfoThread.start();
}
private void startTruncateHistoryTask() {
TruncateHistoryTask truncateHistoryTask = injector
.getInstance(TruncateHistoryTask.class);
Thread truncateHistoryTaskThread = new Thread(truncateHistoryTask);
truncateHistoryTaskThread.setName("Truncate History Task");
truncateHistoryTaskThread.start();
}
private void startTruncateLogsTask() {
TruncateLogsTask truncateLogsTask = injector
.getInstance(TruncateLogsTask.class);
Thread truncateLogsTaskThread = new Thread(truncateLogsTask);
truncateLogsTaskThread.setName("Truncate Logs Task");
truncateLogsTaskThread.start();
}
private void startStockUpdateTask() {
StockUpdateTask updateFollowerCountTask = injector
.getInstance(StockUpdateTask.class);
Thread updateFollowerCountThread = new Thread(updateFollowerCountTask);
updateFollowerCountThread.setName("Stock Update Task");
updateFollowerCountThread.start();
}
public boolean isInitialized() {
return initialized;
}
@Override
public ServletContext getServletContext() {
return servletContext;
}
@Override
public void setServletContext(ServletContext applicationPath) {
this.servletContext = applicationPath;
}
@Override
public void setInjector(Injector injector) {
this.injector = injector;
}
}