protected override async void Run(Session session, C2G_LoginGate message, Action <G2C_LoginGate> reply) { G2C_LoginGate response = new G2C_LoginGate(); StartConfigComponent startComponent = Game.Scene.GetComponent <StartConfigComponent>(); GateSessionKeyComponent gateSessionKeyComponent = Game.Scene.GetComponent <GateSessionKeyComponent>(); try { long uid = gateSessionKeyComponent.Get(message.Key); if (uid <= 0) { response.Error = ErrorCode.ERR_ConnectGateKeyError; response.Message = "Gate key驗證失敗!"; reply(response); return; } // 登入成功,刪除Gate的Key gateSessionKeyComponent.Remove(message.Key); int lobbyAppId = 0; var player = CacheHelper.GetFromCache <Player>(uid); if (player != null && player.lobbyAppId != 0) { lobbyAppId = player.lobbyAppId; } else { lobbyAppId = SessionHelper.GetLobbyIdRandomly(); } // 隨機連接到Lobby伺服器,並創建PlayerUnit實體 G2L_LobbyUnitCreate g2L_LobbyUnitCreate = new G2L_LobbyUnitCreate(); g2L_LobbyUnitCreate.Uid = uid; g2L_LobbyUnitCreate.GateSessionId = session.InstanceId; g2L_LobbyUnitCreate.GateAppId = (int)IdGenerater.AppId; g2L_LobbyUnitCreate.LobbyAppId = lobbyAppId; // 等候LobbyUnit單元創建完成,並且也同步Player到了Gate Session lobbySession = SessionHelper.GetLobbySession(g2L_LobbyUnitCreate.LobbyAppId); L2G_LobbyUnitCreate l2G_LobbyUnitCreate = (L2G_LobbyUnitCreate)await lobbySession.Call(g2L_LobbyUnitCreate); if (l2G_LobbyUnitCreate.Error != ErrorCode.ERR_Success) { response.Error = l2G_LobbyUnitCreate.Error; reply(response); return; } player = BsonSerializer.Deserialize <Player>(l2G_LobbyUnitCreate.Json); CacheExHelper.WriteInCache(player, out player); session.AddComponent <SessionPlayerComponent, long>(player.gateSessionActorId).Player = player; session.AddComponent <MailBoxComponent, string>(MailboxType.GateSession); response.PlayerId = player.Id; reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
public static async ETTask <Tuple <TeamRoomData, RepeatedField <TeamMemberData>, RepeatedField <ReservationMemberData> > > GetTeamInfo(this LobbyComponent self, long roomId) { int mapAppId = IdGenerater.GetAppId(roomId); Session mapSession = SessionHelper.GetMapSession(mapAppId); M2L_GetTeamData m2L_GetTeamData = (M2L_GetTeamData)await mapSession.Call(new L2M_GetTeamData { RoomId = roomId, }); if (m2L_GetTeamData.Error != ErrorCode.ERR_Success) { return(null); } var room = BsonSerializer.Deserialize <Room>(m2L_GetTeamData.RoomJson); CacheExHelper.WriteInCache(room, out _); return(new Tuple <TeamRoomData, RepeatedField <TeamMemberData>, RepeatedField <ReservationMemberData> > (m2L_GetTeamData.TeamData, m2L_GetTeamData.TeamMember, m2L_GetTeamData.ReservationTeamData)); }
public static async ETTask <Room> CreateTeamRoom(this LobbyComponent self, int mapAppId, RoomInfo roomInfo, TeamRoomData teamRoomData) { // 等候房間創建完成,並且也同步Room到了Lobby Session mapSession = SessionHelper.GetMapSession(mapAppId); M2L_TeamCreate m2L_TeamCreate = (M2L_TeamCreate)await mapSession.Call(new L2M_TeamCreate { Info = roomInfo, Data = teamRoomData, }); if (m2L_TeamCreate.Error != ErrorCode.ERR_Success) { return(null); } Room room = BsonSerializer.Deserialize <Room>(m2L_TeamCreate.Json); CacheExHelper.WriteInCache(room, out room); return(room); }
protected override async ETTask Run(MapUnit mapUnit, C2M_TeamInvite message, Action <M2C_TeamInvite> reply) { await ETTask.CompletedTask; M2C_TeamInvite response = new M2C_TeamInvite(); try { if (mapUnit.Room == null) { response.Error = ErrorCode.ERR_RoomIdNotFound; reply(response); return; } if (mapUnit.Room.Type != RoomType.Team) { response.Error = ErrorCode.ERR_RoonTypeError; reply(response); return; } if (mapUnit.Room.State != RoomState.Start) { response.Error = ErrorCode.ERR_RoomTeamStateCanNotInvite; reply(response); return; } User user = await UserDataHelper.FindOneUser(mapUnit.Uid); if (user == null) { response.Error = ErrorCode.ERR_AccountDoesntExist; reply(response); return; } // 建立邀請 InviteData inviteData = new InviteData() { SenderName = user.name, SenderUid = mapUnit.Uid, ReceiverUid = message.ReceiverUid, TeamRoomId = mapUnit.Room.Id, RoadSettingId = mapUnit.Room.info.RoadSettingId }; var player = CacheExHelper.GetFromCache <Player>(mapUnit.Uid); var lobbySession = SessionHelper.GetLobbySession(player.lobbyAppId); L2M_CreateInvite l2M_CreateInvite = (L2M_CreateInvite)await lobbySession.Call(new M2L_CreateInvite { InviteInfo = inviteData, }); if (l2M_CreateInvite.Error != ErrorCode.ERR_Success) { response.Error = ErrorCode.ERR_InviteIdNotFind; reply(response); return; } Invite inviteEntity = BsonSerializer.Deserialize <Invite>(l2M_CreateInvite.Json); CacheExHelper.WriteInCache(inviteEntity, out inviteEntity); // 告知對方 Player inviteTarget = CacheExHelper.GetFromCache <Player>(message.ReceiverUid); if (inviteTarget != null) { //在線上 廣播給指定玩家邀請訊息 G2C_TeamInviteReceiver g2c_TeamInviteReceiver = new G2C_TeamInviteReceiver(); g2c_TeamInviteReceiver.InviteId = inviteEntity.Id; g2c_TeamInviteReceiver.SenderName = inviteEntity.data.SenderName; GateMessageHelper.BroadcastTarget(g2c_TeamInviteReceiver, message.ReceiverUid); } // 推播 User u = await UserDataHelper.FindOneUser(message.ReceiverUid); var firebase = Game.Scene.GetComponent <FirebaseComponent>(); var lang = Game.Scene.GetComponent <LanguageComponent>(); // 多國2-'{0}'邀請你一起組隊! var body = lang.GetString(u.language, 2L); await firebase.SendOneNotification(u.firebaseDeviceToken, string.Empty, string.Format(body, user.name)); response.Error = ErrorCode.ERR_Success; reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }