CTZServer/src/main/java/cn/citycraft/CTZServer/ServerThread.java

108 lines
3.4 KiB
Java

package cn.citycraft.CTZServer;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import cn.citycraft.CTZServer.commands.HandlerCommand;
import cn.citycraft.CTZServer.socket.CTZLoginServerSocket;
import cn.citycraft.PluginHelper.sql.KeyValue;
import cn.citycraft.PluginHelper.sql.MySQLHelper;
import cn.citycraft.PluginHelper.sql.SQLHelper;
import cn.citycraft.PluginHelper.utils.FileUtil;
import net.md_5.bungee.api.ChatColor;
public class ServerThread implements Runnable {
protected CTZLoginServerSocket server;
protected SQLHelper sql;
HandlerCommand handlercmd;
public CTZLoginServerSocket getServer() {
return server;
}
@Override
public void run() {
CTZServer.print(ChatColor.GREEN + "服务器开始启动...");
initCommand();
initDatabase();
initServerInfo();
CTZAuth.init(sql);
server = new CTZLoginServerSocket();
server.start();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String cmdline;
try {
cmdline = br.readLine();
if (cmdline == null || cmdline.isEmpty())
continue;
String[] cmdargs = cmdline.split(" ");
String cmd = cmdargs[0];
handlercmd.execute(cmd, cmdargs);
} catch (IOException e) {
}
}
}
/**
* 初始化命令
*/
void initCommand() {
CTZServer.print(ChatColor.GREEN + "初始化基础命令...");
handlercmd = new HandlerCommand(this);
}
/**
* 初始化数据库
*/
void initDatabase() {
String dbtable = "ctzserver";
CTZServer.print(ChatColor.GREEN + "初始化数据库连接...");
sql = new MySQLHelper("127.0.0.1", 3306, "minecraft", "root", "325325");
if (!sql.dbConnection()) {
CTZServer.warn(ChatColor.RED + "数据库连接失败...");
return;
}
CTZServer.print(ChatColor.GREEN + "数据库连接成功,检查数据表是否存在...");
if (!sql.isTableExists(dbtable)) {
CTZServer.print(ChatColor.RED + "数据表不存在,新建表" + dbtable + "...");
KeyValue kv = new KeyValue("player", "VARCHAR(16) NOT NULL")
.add("password", "VARCHAR(50) NOT NULL")
.add("ip", "VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'")
.add("lastloginout", "BIGINT(20) NOT NULL DEFAULT 0")
.add("x", "DOUBLE NOT NULL DEFAULT 0")
.add("y", "DOUBLE NOT NULL DEFAULT 0")
.add("z", "DOUBLE NOT NULL DEFAULT 0")
.add("email", "VARCHAR(50) NOT NULL DEFAULT 'mc@mc.com'")
.add("world", "VARCHAR(20) DEFAULT 'world'")
.add("islogged", "SMALLINT(6) NOT NULL DEFAULT 0")
.add("allowlogin", "SMALLINT(6) NOT NULL DEFAULT 0");
String Conditions = "UNIQUE (`player`)";
if (!sql.createTables(dbtable, kv, Conditions))
CTZServer.warn(ChatColor.RED + "数据表 " + dbtable + " 创建失败,请尝试手动创建并重启服务器...");
else
CTZServer.print(ChatColor.GREEN + "数据表 " + dbtable + " 创建成功...");
}
}
/**
* 初始化服务器信息
*/
void initServerInfo() {
CTZServer.print(ChatColor.GREEN + "加载服务器信息...");
File infofile = new File("servers.json");
FileUtil.saveResource(this, "/servers.json", infofile, false);
String json = FileUtil.readFile(infofile);
if (CTZServer.Init(json))
CTZServer.print(ChatColor.GREEN + "服务器信息加载成功...");
else
CTZServer.warn(ChatColor.RED + "服务器信息加载失败...");
}
}