CTZLoginServer/src/cn/citycraft/CTZLoginServer/Socket/CTZLoginServerSocket.java

161 lines
4.5 KiB
Java
Raw Normal View History

package cn.citycraft.CTZLoginServer.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.Bukkit;
2015-07-27 13:14:51 +00:00
import cn.citycraft.CTZLoginServer.CTZLoginServer;
import cn.citycraft.CTZLoginServer.Socket.Response.HttpStates;
2015-07-27 13:14:51 +00:00
import fr.xephi.authme.api.API;
2015-07-27 13:14:51 +00:00
public class CTZLoginServerSocket implements Runnable {
public int PORT = 8080;
public CTZLoginServer plugin;
/**
*
*/
public CTZLoginServerSocket(CTZLoginServer plugin, int port) {
this.plugin = plugin;
PORT = port;
}
@Override
public void run() {
ServerSocket s = null;
Socket socket = null;
try {
2015-07-27 13:14:51 +00:00
// 设定服务端的端口号
s = new ServerSocket(2000);
System.out.println("CTZL服务器开始监听 端口:" + s.getLocalPort());
2015-07-27 13:14:51 +00:00
// 等待请求,此方法会一直阻塞,直到获得请求才往下走
while (true) {
socket = s.accept();
System.out.println("CTZL服务器收到请求 客户端IP: " + socket.getRemoteSocketAddress() + " 端口:"
+ socket.getPort());
new ClientThread(socket).start();
}
} catch (Exception e) {
2015-07-27 13:14:51 +00:00
System.out.println("CTZL服务器崩溃...");
} finally {
System.out.println("关闭连接");
try {
socket.close();
s.close();
} catch (Exception e2) {
}
}
}
class ClientThread extends Thread {
Socket client = null;
BufferedReader br = null;
PrintWriter pw = 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);
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 "isregister":
username = req.getQuerystring("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.getQuerystring("username");
password = req.getQuerystring("password");
if (username == null || password == null) {
res.setState(HttpStates.Bad_Request);
break;
}
if (API.registerPlayer(username, password))
res.setHtml("true");
else
res.setHtml("false");
break;
case "login":
username = req.getQuerystring("username");
password = req.getQuerystring("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 "islogin":
username = req.getQuerystring("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.getQuerystring("username");
password = req.getQuerystring("password");
if (username == null) {
res.setState(HttpStates.Bad_Request);
break;
}
if (API.checkPassword(username, password))
res.setHtml("true");
// TODO 处理玩家密码修改事件
else
res.setHtml("false");
break;
default:
res.setState(HttpStates.Bad_Request);
}
System.out.println(res.toString());
pw.write(res.toString());
pw.flush();
}
break;
}
}
br.close();
pw.close();
client.close();
} catch (Exception e) {
}
}
}
}