using Fantasy; using Fantasy.Async; using Fantasy.Entitas; using Fantasy.Network.Interface; namespace NB.Map; public class C2Map_CreateRoomRequestHandler : RouteRPC { protected override async FTask Run(MapUnit entity, C2Map_CreateRoomRequest request, Map2C_CreateRoomResponse response, Action reply) { if (entity.MapId != request.MapId) { response.ErrorCode = ErrorCode.MapCreateRoomNotEnter; return; } var roomManageComponent = entity.Scene.GetComponent(); if (roomManageComponent == null) { response.ErrorCode = ErrorCode.ErrServer; return; } var roomId = roomManageComponent.AllocateId(); if (roomId < 1) { response.ErrorCode = ErrorCode.MapCreateRoomMax; return; } // roomManageComponent.on var room = Entity.Create(entity.Scene, true, true); room.Owner = entity.Id; room.RoomId = roomId; room.Code = RoomHelper.GenerateCode(entity.Scene.SceneConfigId, roomId); roomManageComponent.Add(room); Log.Info( $"创建房间=== sId={entity.Scene.SceneConfigId} map:{request.MapId} id={room.RoomId} code={room.Code}"); await FTask.CompletedTask; } }