107 lines
3.3 KiB
Java
107 lines
3.3 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.sql.KeyValue;
|
|
import cn.citycraft.sql.MySQLHelper;
|
|
import cn.citycraft.sql.SQLHelper;
|
|
import cn.citycraft.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(this);
|
|
|
|
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");
|
|
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 + "服务器信息加载失败...");
|
|
}
|
|
}
|