
作用:根据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#反射//判断methodNameif (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);}}}