tcp-server/src/main/java/com/zhangmeng/service/impl/ServerImpl.java

156 lines
4.0 KiB
Java

package com.zhangmeng.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.BufferUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import cn.hutool.log.StaticLog;
import cn.hutool.socket.aio.AioServer;
import cn.hutool.socket.aio.AioSession;
import cn.hutool.socket.aio.SimpleIoAction;
import com.zhangmeng.callBack.HandlerApiCallBack;
import com.zhangmeng.handler.ClientHandler;
import com.zhangmeng.service.Connection;
import com.zhangmeng.service.Router;
import com.zhangmeng.service.Server;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zm
* @date 2025/2/21 15:04
* @version: 1.0
*/
public class ServerImpl implements Server {
private final Log log = LogFactory.get();
private Config config;
private ServerSocket serverSocket;
private BufferedReader in;
private Router router; //当前Server由用户绑定的回调router,也就是Server注册的链接对应的处理业务
public static Map<String, Socket> socketList = new HashMap<>();
@Override
public void Start() {
log.info("[START] Server listenner at Name: {}, IPVersion {}, is starting", config.getName(), config.getIPVersion());
log.info("[START] Server listenner at IP: {}, Port {}, is starting", config.getIP(), config.getPort());
try {
serverSocket = new ServerSocket(config.getPort());
int cid = 0;
while (true) {
Socket accept = serverSocket.accept();
String key = accept.getInetAddress().getHostAddress() + ":" + accept.getPort();
socketList.put(key, accept);
log.info("key=====================================: " + key);
//new ClientHandler(accept).start();
log.info("[ACCEPT] Accept a client at IP: {}, Port {}", accept.getInetAddress().getHostAddress(), accept.getPort());
Connection conn = new ConnectionImpl(accept,cid,this.router);
conn.Start();
cid++;
}
} catch (IOException e) {
// throw new RuntimeException(e);
log.error(e.getMessage());
}
}
@Override
public void Stop() {
log.info("[STOP] Server listenner at IP: {}, Port {}, is stoped", config.getIP(), config.getPort());
try {
serverSocket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void Serve() {
}
@Override
public void AddRouter(Router router) {
this.router = router;
log.info("[ADD ROUTER] Add a router to server");
}
public void setConfig(Config config) {
this.config = config;
}
public static class Config {
//服务器的名称
private String Name;
//tcp4 or other
private String IPVersion;
//服务绑定的IP地址
private String IP;
//服务绑定的端口
private int Port;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getIPVersion() {
return IPVersion;
}
public void setIPVersion(String IPVersion) {
this.IPVersion = IPVersion;
}
public String getIP() {
return IP;
}
public void setIP(String IP) {
this.IP = IP;
}
public int getPort() {
return Port;
}
public void setPort(int port) {
Port = port;
}
}
public Router getRouter() {
return router;
}
public void setRouter(Router router) {
this.router = router;
}
}