微信登录

Controller - ControllerManager.cs - 映射方法

作用:根据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离开战斗

  1. //控制者分发
  2. class ControllerManager
  3. {
  4. private Dictionary<RequestCode, BaseController> controllerDict = new Dictionary<RequestCode, BaseController>();
  5. private Server server;
  6. //初始化
  7. public ControllerManager(Server server) {}
  8. void InitController(){}
  9. public void HandleRequest(请求码,动作码,数据,客户端) {}
  10. }
  1. //控制者分发
  2. class ControllerManager
  3. {
  4. private Dictionary<RequestCode, BaseController> controllerDict = new Dictionary<RequestCode, BaseController>();
  5. private Server server;
  6. //初始化
  7. public ControllerManager(Server server) {}
  8. void InitController(){}
  9. public void HandleRequest(RequestCode requestCode,ActionCode actionCode,string data,Client client) {}
  10. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Common;
  7. using System.Reflection;
  8. using GameServer.Servers;
  9. namespace GameServer.Controller
  10. {
  11. //控制者分发
  12. class ControllerManager
  13. {
  14. private Dictionary<RequestCode, BaseController> controllerDict = new Dictionary<RequestCode, BaseController>();
  15. private Server server;
  16. //初始化
  17. public ControllerManager(Server server) {
  18. this.server = server;
  19. InitController();
  20. }
  21. void InitController()
  22. {
  23. DefaultController defaultController = new DefaultController();
  24. controllerDict.Add(defaultController.RequestCode, defaultController);
  25. controllerDict.Add(RequestCode.User, new UserController());
  26. controllerDict.Add(RequestCode.Room, new RoomController());
  27. controllerDict.Add(RequestCode.Game, new GameController());
  28. }
  29. public void HandleRequest(RequestCode requestCode,ActionCode actionCode,string data,Client client)
  30. {
  31. //控制器
  32. BaseController controller;
  33. bool isGet = controllerDict.TryGetValue(requestCode, out controller);
  34. //判断requestCode None,User,Room,Game,
  35. if (isGet == false)
  36. {
  37. Console.WriteLine("无法得到[" + requestCode + "]所对应的Controller,无法处理请求");return;
  38. }
  39. string methodName = Enum.GetName(typeof(ActionCode), actionCode);//枚举类型转换成字符串
  40. //反射
  41. MethodInfo mi = controller.GetType().GetMethod(methodName);//C#反射
  42. //判断methodName
  43. if (mi == null)
  44. {
  45. Console.WriteLine("[警告]在Controller["+controller.GetType()+"]中没有对应的处理方法:["+methodName+"]");return;
  46. }
  47. object[] parameters = new object[] { data,client,server };
  48. object o = mi.Invoke(controller, parameters);
  49. if(o==null||string.IsNullOrEmpty( o as string))
  50. {
  51. return;
  52. }
  53. //_发起响应
  54. server.SendResponse(client, actionCode, o as string);
  55. }
  56. }
  57. }
Controller - ControllerManager.cs - 映射方法