Server - Server.cs - 枢纽
中文
class Server { private IPEndPoint ipEndPoint;//IP private Socket serverSocket;//监听、协议 private List<Client> clientList = new List<Client>();//全部客户端 private List<Room> roomList = new List<Room>(); private ControllerManager controllerManager;//控制者分发 //新建一个server public Server() {}//构造方法 public Server(IP,PORT){} //设置IP和port public void SetIpAndPort(IP,PORT){} //启动监听 public void Start(){} //异步接收 private void AcceptCallBack(IAsyncResult ar ){} //_移除断开连线的客户端:被Client调用 public void RemoveClient(客户端){} //_给客户端发起响应 public void SendResponse(客户端,动作码,数据){} //传给ControllerManager public void HandleRequest(RequestCode requestCode, ActionCode actionCode, string data, 客户端){} //创建房间 public void CreateRoom(客户端){} //移除房间 public void RemoveRoom(房间){} //房间列表 public List<Room> GetRoomList(){} //获得房间号 public Room GetRoomById(用户id){} }
无代码
class Server { private IPEndPoint ipEndPoint;//IP private Socket serverSocket;//监听、协议 private List<Client> clientList = new List<Client>();//全部客户端 private List<Room> roomList = new List<Room>(); private ControllerManager controllerManager;//控制者分发 //新建一个server public Server() {}//构造方法 public Server(string ipStr,int port){} //设置IP和port public void SetIpAndPort(string ipStr, int port){} //启动监听 public void Start(){} //异步接收 private void AcceptCallBack(IAsyncResult ar ){} //_移除断开连线的客户端:被Client调用 public void RemoveClient(Client client){} //_给客户端发起响应 public void SendResponse(Client client,ActionCode actionCode,string data){} //传给ControllerManager public void HandleRequest(RequestCode requestCode, ActionCode actionCode, string data, Client client){} //创建房间 public void CreateRoom(Client client){} //移除房间 public void RemoveRoom(Room room){} //房间列表 public List<Room> GetRoomList(){} //获得房间号 public Room GetRoomById(int id){} }
完整代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net.Sockets;using System.Net;using GameServer.Controller;using Common;namespace GameServer.Servers{ class Server { private IPEndPoint ipEndPoint;//IP private Socket serverSocket;//监听、协议 private List<Client> clientList = new List<Client>();//全部客户端 private List<Room> roomList = new List<Room>(); private ControllerManager controllerManager;//控制者分发 //新建一个server public Server() {}//构造方法 public Server(string ipStr,int port) { controllerManager = new ControllerManager(this);//初始化开启控制器 SetIpAndPort(ipStr, port); } //设置IP和port public void SetIpAndPort(string ipStr, int port) { ipEndPoint = new IPEndPoint(IPAddress.Parse(ipStr), port); } //启动监听 public void Start() { serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//启动协议 serverSocket.Bind(ipEndPoint);//绑定IP serverSocket.Listen(0);//监听,无限个 serverSocket.BeginAccept(AcceptCallBack, null);//异步接收 } //异步接收 private void AcceptCallBack(IAsyncResult ar ) { Socket clientSocket = serverSocket.EndAccept(ar);//客户端的连接类 Client client = new Client(clientSocket,this);//新建一个客户端 client.Start(); clientList.Add(client);//列表增加一个当前客户端 serverSocket.BeginAccept(AcceptCallBack, null); } //_移除断开连线的客户端:被Client调用 public void RemoveClient(Client client) { lock (clientList)//锁 { clientList.Remove(client); } } //_给客户端发起响应 public void SendResponse(Client client,ActionCode actionCode,string data) { client.Send(actionCode, data); } //传给ControllerManager public void HandleRequest(RequestCode requestCode, ActionCode actionCode, string data, Client client) { controllerManager.HandleRequest(requestCode, actionCode, data, client); } //创建房间 public void CreateRoom(Client client) { Room room = new Room(this); room.AddClient(client); roomList.Add(room); } //移除房间 public void RemoveRoom(Room room) { if (roomList != null && room != null) { roomList.Remove(room); } } //房间列表 public List<Room> GetRoomList() { return roomList; } //获得房间号 public Room GetRoomById(int id) { foreach(Room room in roomList) { if (room.GetId() == id) return room; } return null; } }}