package ALBasicServer;
import ALBasicServer.ALServerAsynTask.ALAsynTaskManager;
import ALBasicServer.ALSocket.ALServerSocketListenFunction;
import ALBasicServer.ALThread.ALThreadManager;
import ALBasicServer.ALVerifyObj._IALVerifyFun;
import ALServerLog.ALServerLog;
public class ALBasicServer
{
/** 是否成功初始化 */
private static boolean g_inited = false;
/**
* 服务器模块启动初始化函数<br>
* 开启基本的服务器逻辑任务处理线程<br>
* 异步任务处理线程<br>
* 以及相关发送消息线程和Socket监听循环<br>
*
* @author alzq.z
* @time Feb 19, 2013 4:33:52 PM
*/
public static void initBasicServer(int _asynTaskDealThreadCount)
{
if(g_inited)
{
ALServerLog.Fatal("Please don't try to repeat init AL Basic Server model!!");
new Exception().printStackTrace();
return ;
}
g_inited = true;
//读取配置文件并初始化相关环境操作
if(ALBasicServerConf.getInstance().init())
{
//初始化日志配置
ALServerLog.initALServerLog();
//输出服务器基本日志
ALServerLog.Fatal(ALBasicServerConf.getInstance().getServerTag() + " start initialize...");
ALServerLog.Fatal("Server Log Level - " + ALServerLog.getLogLevel());
//开启命令行读取任务
ALThreadManager.getInstance().createCmdReadThread();
//开启定时任务的检测线程
ALThreadManager.getInstance().createTimingTaskCheckThread();
//开启对应的普通任务执行线程
ALServerLog.Fatal("Server Start Task Thread Count - " + ALBasicServerConf.getInstance().getSynTaskThreadNum());
for(int i = 0; i < ALBasicServerConf.getInstance().getSynTaskThreadNum(); i++)
{
ALThreadManager.getInstance().createTaskDealThread();
}
//开启对应的端口发送执行线程
ALServerLog.Fatal("Server Start Socket Send Thread Count - " + ALBasicServerConf.getInstance().getSendThreadNum());
for(int i = 0; i < ALBasicServerConf.getInstance().getSendThreadNum(); i++)
{
ALThreadManager.getInstance().createSocketSendThread();
}
//开启对应的异步任务执行线程
ALServerLog.Fatal("Server Start AsyncTask Thread Count - " + _asynTaskDealThreadCount);
ALAsynTaskManager.getInstance().init(_asynTaskDealThreadCount);
}
if(ALBasicServerConf.getInstance().getCheckMutex())
{
//获得当前线程ID
long threadID = Thread.currentThread().getId();
ALThreadManager.getInstance().regThread(threadID);
}
}
/**********************
* 开启服务器监听端口,并对所有返回数据做处理
*
* @author alzq.z
* @time Feb 19, 2013 4:34:07 PM
*/
public static void startListener(int _port, int _recBuffLen, _IALVerifyFun _verifyObj)
{
if(null == _verifyObj)
{
ALServerLog.Fatal("Can not Use The Null VerifyObj!");
return ;
}
ALServerSocketListenFunction.startServer(_port, _recBuffLen, _verifyObj);
}
}