C2G_CreatRoomHandler.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace ET.Server
  5. {
  6. /// <summary>
  7. /// 创建房间
  8. /// </summary>
  9. [MessageHandler(SceneType.Game)]
  10. public class C2G_CreatRoomHandler : AMRpcHandler<C2G_CreatRoom, G2C_CreatRoom>
  11. {
  12. protected override async ETTask Run(Session session, C2G_CreatRoom request, G2C_CreatRoom response, Action reply)
  13. {
  14. Player player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
  15. if (player == null)
  16. {
  17. response.Error = ErrorCode.ERR_OperationError;
  18. response.Message = "玩家不存在或离线...";
  19. reply();
  20. return;
  21. }
  22. // 玩家是否在房间
  23. if (player.RoomID > 0)
  24. {
  25. response.Error = ErrorCode.ERR_OperationError;
  26. response.Message = "玩家已在房间,不可创建房间...";
  27. reply();
  28. return;
  29. }
  30. Scene scene = session.DomainScene();
  31. // 创建房间
  32. Room room = scene.GetComponent<GameRoomComponent>().AddChild<Room, Player>(player);
  33. if (room == null)
  34. {
  35. response.Error = ErrorCode.ERR_SystemError;
  36. response.Message = "创建房间失败...";
  37. reply();
  38. return;
  39. }
  40. // 返回房间数据
  41. response.OwnerId = room.OwnerId;
  42. response.PlayerList = new List<PlayerInfo>();
  43. foreach (Player p in room.Players.Where(p => p != null))
  44. {
  45. response.PlayerList.Add(PlayerHelper.PlayerToProto(p));
  46. }
  47. await ETTask.CompletedTask;
  48. }
  49. }
  50. }