Exemplo n.º 1
0
        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}");
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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
        }
Exemplo n.º 4
0
        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 被销毁...");
            }
        }
Exemplo n.º 6
0
        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
        }
Exemplo n.º 7
0
        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();
        }