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