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 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; } }