protected override async ETTask Run(Scene scene, G2M_CreateRoomRequest message, M2G_CreateRoomResponse response, Action reply) { // 获取一个房间号 long locationInstanceId = StartSceneConfigCategory.Instance.LocationConfig.SceneId; L2M_GetRoomNumResponse getRoomNumResponse = (L2M_GetRoomNumResponse)await ActorMessageHelper.CallActor(locationInstanceId, new M2L_GetRoomNumRequest()); if (getRoomNumResponse.Error != ErrorCode.ERR_Success) { response.Error = getRoomNumResponse.Error; response.Message = getRoomNumResponse.Message; reply(); return; } Room room = EntityFactory.Create <Room, long, long>(scene, getRoomNumResponse.RoomNum, message.UId); room.Parent = scene; room.AddComponent <MailBoxComponent>(); await room.AddLocation(); response.RoomNum = room.Num; reply(); Log.Info($"创建房间:{room.Num}"); }
protected override async ETTask Run(Session session, C2G_EnterRoomRequest request, G2C_EnterRoomResponse response, Action reply) { // 获取房间Id long locationInstanceId = StartSceneConfigCategory.Instance.LocationConfig.SceneId; L2A_RoomGetResponse roomGetResponse = (L2A_RoomGetResponse)await ActorMessageHelper.CallActor(locationInstanceId, new A2L_RoomGetRequest { RoomNum = request.RoomNum }); if (roomGetResponse.Error != ErrorCode.ERR_Success) { response.Error = roomGetResponse.Error; response.Message = roomGetResponse.Message; reply(); return; } // 向房间请求加入 long uid = session.GetComponent <UserInfo>().UId; M2G_EnterRoomResponse joinRoomResponse = (M2G_EnterRoomResponse)await ActorMessageHelper.CallLocationActor(roomGetResponse.RoomId, new G2M_EnterRoomRequest { UId = uid, GateSessionId = session.InstanceId }); response.SeatIndex = joinRoomResponse.SeatIndex; response.Error = joinRoomResponse.Error; response.Message = joinRoomResponse.Message; response.RoomMaster = joinRoomResponse.RoomMaster; if (response.Error == ErrorCode.ERR_Success) { GateSessionActorId gateSessionActorId = session.GetComponent <GateSessionActorId>() ?? session.AddComponent <GateSessionActorId>(); gateSessionActorId.ActorId = joinRoomResponse.PlayerActorId; } reply(); }
public override void Destroy(Room self) { Log.Debug($"销毁房间:num={self.Num}, master={self.UId}"); #if SERVER long locationInstanceId = StartSceneConfigCategory.Instance.LocationConfig.SceneId; ActorMessageHelper.SendActor(locationInstanceId, new M2L_RoomRemoveMessage { RoomNum = self.Num }); #endif }
public static void SendActor(this Room self, Player player, IActorMessage message) { var comp = player.GetComponent <PlayerServer>(); if (!comp.IsNetSync) { return; } ActorMessageHelper.SendActor(comp.GateSessionId, message); }
public override void Destroy(GateSessionActorId self) { // 0 还没有在游戏服创建Player if (self.ActorId != 0) { // 发送断线消息 ActorMessageHelper.SendToLocationActor(self.ActorId, new G2M_SessionDisconnect()); Log.Debug($"Session 被销毁..."); } }
public override void Awake(Room self, long num, long uid) { self.Awake(num, uid); self.AddComponent <GameInfo>(); Log.Debug($"创建房间:num={num}, master={uid}"); #if SERVER long locationInstanceId = StartSceneConfigCategory.Instance.LocationConfig.SceneId; ActorMessageHelper.SendActor(locationInstanceId, new M2L_RoomAddMessage { RoomId = self.Id, RoomNum = self.Num }); #endif }
protected override async ETTask Run(Session session, C2G_ExitRoomRequest request, G2C_ExitRoomResponse response, Action reply) { var id = session.GetComponent <GateSessionActorId>(); if (id == null) { reply(); return; } var actorId = id.ActorId; var resp = (M2G_ExitRoomResponse)await ActorMessageHelper.CallLocationActor(actorId, new G2M_ExitRoomRequest { IsDestroyRoom = request.IsDestroyRoom }); response.Error = resp.Error; response.Message = resp.Message; // 已经离开房间 session.GetComponent <GateSessionActorId>().ActorId = 0; reply(); }