177 lines
4.8 KiB
Java
177 lines
4.8 KiB
Java
package cn.citycraft.CTZServer.socket;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.BufferedWriter;
|
|
import java.io.InputStreamReader;
|
|
import java.io.OutputStreamWriter;
|
|
import java.io.PrintWriter;
|
|
import java.net.ServerSocket;
|
|
import java.net.Socket;
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import cn.citycraft.CTZServer.CTZServer;
|
|
import cn.citycraft.CTZServer.socket.Response.HttpStates;
|
|
|
|
public class CTZLoginServerSocket extends Thread {
|
|
ServerSocket s = null;
|
|
Socket socket = null;
|
|
int port = 25580;
|
|
|
|
/**
|
|
* 初始化服务端口
|
|
*/
|
|
public CTZLoginServerSocket() {
|
|
}
|
|
|
|
/**
|
|
* 初始化服务端口
|
|
*/
|
|
public CTZLoginServerSocket(int port) {
|
|
this.port = port;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
// 设定服务端的端口号
|
|
s = new ServerSocket(port);
|
|
CTZServer.getLogger().info(ChatColor.BLUE + "CTZ服务器开始监听 端口:" + s.getLocalPort());
|
|
// 等待请求,此方法会一直阻塞,直到获得请求才往下走
|
|
while (true) {
|
|
socket = s.accept();
|
|
new ClientThread(socket).start();
|
|
}
|
|
} catch (Exception e) {
|
|
CTZServer.getLogger().warning(ChatColor.RED + "CTZ服务器崩溃: " + e.getMessage());
|
|
} finally {
|
|
ShutDown();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关闭服务器
|
|
*/
|
|
public void ShutDown() {
|
|
try {
|
|
socket.close();
|
|
s.close();
|
|
} catch (Exception e) {
|
|
}
|
|
CTZServer.getLogger().info(ChatColor.RED + "CTZ服务器已关闭...");
|
|
System.exit(0);
|
|
}
|
|
|
|
class ClientThread extends Thread {
|
|
Socket client = null;
|
|
BufferedReader br = null;
|
|
PrintWriter pw = null;
|
|
String ip = null;
|
|
|
|
public ClientThread(Socket client) {
|
|
this.client = client;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
// 用于接收客户端发来的请求
|
|
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
|
// 用于发送返回信息,可以不需要装饰这么多io流使用缓冲流时发送数据要注意调用.flush()方法
|
|
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
|
|
ip = client.getInetAddress().getHostAddress();
|
|
while (true) {
|
|
String str = br.readLine();
|
|
if (str != null) {
|
|
Request req = new Request(str);
|
|
Response res = new Response();
|
|
String username = "";
|
|
String password = "";
|
|
if (req.isSuccess) {
|
|
switch (req.getPrefix().substring(1)) {
|
|
case "isregistered":
|
|
username = req.Query("username");
|
|
if (username == null) {
|
|
res.setState(HttpStates.Bad_Request);
|
|
break;
|
|
}
|
|
// if (API.isRegistered(username))
|
|
// res.setHtml("true");
|
|
// else
|
|
// res.setHtml("false");
|
|
break;
|
|
case "register":
|
|
username = req.Query("username");
|
|
password = req.Query("password");
|
|
if (username == null || password == null) {
|
|
res.setState(HttpStates.Bad_Request);
|
|
break;
|
|
}
|
|
// if (API.registerPlayer(username, password)) {
|
|
// res.setHtml("true");
|
|
// Bukkit.getConsoleSender().sendMessage("§6玩家: §a" + username + " §d注册成功 IP: " + ip);
|
|
// } else
|
|
// res.setHtml("false");
|
|
break;
|
|
case "login":
|
|
username = req.Query("username");
|
|
password = req.Query("password");
|
|
if (username == null || password == null) {
|
|
res.setState(HttpStates.Bad_Request);
|
|
break;
|
|
}
|
|
// if (API.checkPassword(username, password)) {
|
|
// res.setHtml("true");
|
|
// if (CTZLoginQueue.isCheckIP())
|
|
// CTZLoginQueue.add(username, ip);
|
|
// else
|
|
// CTZLoginQueue.add(username);
|
|
// Bukkit.getConsoleSender().sendMessage("§6玩家: §a" + username + " §3登录成功 IP: " + ip);
|
|
// } else
|
|
// res.setHtml("false");
|
|
break;
|
|
case "islogin":
|
|
username = req.Query("username");
|
|
if (username == null) {
|
|
res.setState(HttpStates.Bad_Request);
|
|
break;
|
|
}
|
|
// if (Bukkit.getPlayer(username) != null)
|
|
// res.setHtml("true");
|
|
// else
|
|
// res.setHtml("false");
|
|
// break;
|
|
case "changepassword":
|
|
username = req.Query("username");
|
|
password = req.Query("password");
|
|
if (username == null || password == null) {
|
|
res.setState(HttpStates.Bad_Request);
|
|
break;
|
|
}
|
|
// if (API.checkPassword(username, password))
|
|
// res.setHtml("true");
|
|
// // TODO 处理玩家密码修改事件
|
|
// else
|
|
// res.setHtml("false");
|
|
break;
|
|
case "serverlist":
|
|
res.setState(HttpStates.OK);
|
|
res.setHtml(CTZServer.getJson());
|
|
break;
|
|
default:
|
|
res.setState(HttpStates.Bad_Request);
|
|
}
|
|
pw.write(res.toString());
|
|
pw.flush();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
br.close();
|
|
pw.close();
|
|
client.close();
|
|
} catch (Exception e) {
|
|
}
|
|
}
|
|
}
|
|
} |