作用:根据RequestCode和ActionCode区分哪个文件夹、哪个方法
RequestCode:User用户、Room房间、Game游戏
User用户ActionCode:Login登陆注册、Register注册
Room房间ActionCode:ListRoom房间列表、CreateRoom创建房间、JoinRoom加入房间、UpdateRoom更新房间、QuitRoom离开房间
Game游戏ActionCode:StartGame开始游戏、ShowTimer显示时间、StartPlay开始战斗、Move角色移动、Shoot角色射击、Attack受到伤害、GameOver游戏结束、UpdateResult更新结果、QuitBattle离开战斗
//控制者分发
class ControllerManager
{
private Dictionary<RequestCode, BaseController> controllerDict = new Dictionary<RequestCode, BaseController>();
private Server server;
//初始化
public ControllerManager(Server server) {}
void InitController(){}
public void HandleRequest(请求码,动作码,数据,客户端) {}
}
//控制者分发
class ControllerManager
{
private Dictionary<RequestCode, BaseController> controllerDict = new Dictionary<RequestCode, BaseController>();
private Server server;
//初始化
public ControllerManager(Server server) {}
void InitController(){}
public void HandleRequest(RequestCode requestCode,ActionCode actionCode,string data,Client client) {}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common;
using System.Reflection;
using GameServer.Servers;
namespace GameServer.Controller
{
//控制者分发
class ControllerManager
{
private Dictionary<RequestCode, BaseController> controllerDict = new Dictionary<RequestCode, BaseController>();
private Server server;
//初始化
public ControllerManager(Server server) {
this.server = server;
InitController();
}
void InitController()
{
DefaultController defaultController = new DefaultController();
controllerDict.Add(defaultController.RequestCode, defaultController);
controllerDict.Add(RequestCode.User, new UserController());
controllerDict.Add(RequestCode.Room, new RoomController());
controllerDict.Add(RequestCode.Game, new GameController());
}
public void HandleRequest(RequestCode requestCode,ActionCode actionCode,string data,Client client)
{
//控制器
BaseController controller;
bool isGet = controllerDict.TryGetValue(requestCode, out controller);
//判断requestCode None,User,Room,Game,
if (isGet == false)
{
Console.WriteLine("无法得到[" + requestCode + "]所对应的Controller,无法处理请求");return;
}
string methodName = Enum.GetName(typeof(ActionCode), actionCode);//枚举类型转换成字符串
//反射
MethodInfo mi = controller.GetType().GetMethod(methodName);//C#反射
//判断methodName
if (mi == null)
{
Console.WriteLine("[警告]在Controller["+controller.GetType()+"]中没有对应的处理方法:["+methodName+"]");return;
}
object[] parameters = new object[] { data,client,server };
object o = mi.Invoke(controller, parameters);
if(o==null||string.IsNullOrEmpty( o as string))
{
return;
}
//_发起响应
server.SendResponse(client, actionCode, o as string);
}
}
}