package chat.server;
|
|
import javax.servlet.ServletContext;
|
|
import org.apache.log4j.Logger;
|
|
import chat.module.ModuleLoader;
|
import chat.server.netty.NettyAcceptor;
|
import frame.persist.DatasuorceLoader;
|
import frame.persist.NamedSQLLoader;
|
import io.netty.util.ResourceLeakDetector;
|
|
|
public class ServerInstance {
|
|
private static Logger logger;
|
private static ServerInstance instance;
|
private String version;
|
public static ServerState state;
|
|
static {
|
logger = Logger.getLogger(ServerInstance.class);
|
}
|
|
public ServerInstance(ServletContext servletContext) {
|
version = "1.0.0.1";
|
}
|
|
public static void startService(ServletContext servletContext) {
|
try {
|
instance = new ServerInstance(servletContext);
|
instance.start();
|
}
|
catch (Exception e) {
|
logger.error(e);
|
e.printStackTrace();
|
}
|
}
|
|
public static void stopService() {
|
try {
|
if(instance != null) {
|
instance.stop();
|
}
|
|
} catch (Exception e) {
|
logger.error(e);
|
e.printStackTrace();
|
}
|
}
|
|
public void start() throws Exception {
|
try {
|
state = ServerState.Starting;
|
|
//1. write info
|
logger.info("server is startting...");
|
logger.info("server root path is " + Configer.getPath_Application());
|
|
//2. resource leak
|
ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.ADVANCED);
|
|
//3. data source and SQL
|
DatasuorceLoader.staticLoad();
|
NamedSQLLoader.staticLoad();
|
|
//4. schedule
|
// dbScheduler、imBusinessScheduler、callbackScheduler
|
|
//5.
|
ModuleLoader.load();
|
|
//6、 start listener list
|
NettyAcceptor.start();
|
|
state = ServerState.Start;
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
finally {
|
printStartUpMessage();
|
}
|
}
|
|
public void stop() {
|
logger.info("internal server is stopping...");
|
|
NettyAcceptor.stop();
|
|
logger.info("internal server has been stopped");
|
}
|
|
public void restart() throws Exception {
|
stop();
|
start();
|
}
|
|
private static String echoString(String word, int count) {
|
StringBuilder result = new StringBuilder();
|
|
for (int i = 1; i <= count; i++) {
|
result.append(word);
|
}
|
|
return result.toString();
|
}
|
|
private void printStartUpMessage() {
|
int length_total = 40;
|
|
long total = Math.round((Runtime.getRuntime().totalMemory()) / (1024.0 * 1024));
|
long max = Math.round((Runtime.getRuntime().maxMemory()) / (1024.0 * 1024));
|
|
String envirenment = Configer.getString("EnvironmentName");
|
System.out.println("--->>> " + envirenment + " --->>>");
|
|
System.out.println(echoString("*", length_total + 2));
|
printMessage("Total Memory:" + total + "M", length_total);
|
printMessage("Max Memory:" + max + "M", length_total);
|
printMessage(version, length_total);
|
System.out.println(echoString("*", length_total + 2));
|
}
|
|
private void printMessage(String message, int totalLength) {
|
MessagePos messagePos = new MessagePos(totalLength, message);
|
System.out.println("*" + echoString(" ", messagePos.length_begin) + message + echoString(" ", messagePos.length_end) + "*");
|
}
|
|
private class MessagePos {
|
private int length_begin;
|
private int length_end;
|
private int length_message;
|
|
public MessagePos(int totalLength, String message) {
|
length_message = message.length();
|
length_begin = (totalLength - length_message) / 2;
|
length_end = totalLength - length_begin - length_message;
|
}
|
}
|
|
public static boolean isStart() {
|
return ServerState.Start == state;
|
}
|
}
|