using AscNet.Common.MsgPack; using MessagePack; using Newtonsoft.Json; namespace AscNet.GameServer.Handlers { internal class AccountModule { [PacketHandler("HandshakeRequest")] public static void HandshakeRequestHandler(Session session, byte[] packet) { // TODO: make this somehow universal, look into better architecture to handle packets // and automatically log their deserialized form HandshakeRequest request = MessagePackSerializer.Deserialize(packet); session.c.Log("HandshakeRequest" + " " + JsonConvert.SerializeObject(request)); HandshakeResponse response = new() { Code = 0, UtcOpenTime = 0, Sha1Table = null }; session.SendResponse(response); } [PacketHandler("LoginRequest")] public static void LoginRequestHandler(Session session, byte[] packet) { LoginRequest request = MessagePackSerializer.Deserialize(packet); session.c.Log("LoginRequest" + " " + JsonConvert.SerializeObject(request)); session.SendResponse(new LoginResponse { Code = 0, ReconnectToken = "eeeeeeeeeeeeeeh", UtcOffset = 0, UtcServerTime = (uint)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }); DoLogin(session); } [PacketHandler("EnterWorldChatRequest")] public static void EnterWorldChatRequestHandler(Session session, byte[] packet) { //EnterWorldChatRequest request = MessagePackSerializer.Deserialize(packet); //session.c.Log("EnterWorldChatRequest" + " " + JsonConvert.SerializeObject(request)); EnterWorldChatResponse enterWorldChatResponse = new() { Code = 0, ChannelId = 0 }; session.SendResponse(enterWorldChatResponse); } [PacketHandler("GetWorldChannelInfoRequest")] public static void GetWorldChannelInfoRequestHandler(Session session, byte[] packet) { //GetWorldChannelInfoRequest request = MessagePackSerializer.Deserialize(packet); //session.c.Log("GetWorldChannelInfoRequest" + " " + JsonConvert.SerializeObject(request)); GetWorldChannelInfoResponse getWorldChannelInfoResponse = new(); getWorldChannelInfoResponse.ChannelInfos.Append(new() { ChannelId = 0, PlayerNum = 0 }); session.SendResponse(getWorldChannelInfoResponse); } [PacketHandler("OfflineMessageRequest")] public static void OfflineMessageRequestHandler(Session session, byte[] packet) { OfflineMessageRequest request = MessagePackSerializer.Deserialize(packet); session.c.Log("OfflineMessageRequest" + " " + JsonConvert.SerializeObject(request)); OfflineMessageResponse offlineMessageResponse = new() { Code = 0, Messages = Array.Empty() }; session.SendResponse(offlineMessageResponse); } [PacketHandler("HeartbeatRequest")] public static void HeartbeatRequestHandler(Session session, byte[] packet) { //HeartbeatRequest request = MessagePackSerializer.Deserialize(packet); //session.c.Log("HeartbeatRequest" + " " + JsonConvert.SerializeObject(request)); HeartbeatResponse heartbeatResponse = new() { UtcServerTime = (uint)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }; session.SendResponse(heartbeatResponse); } [PacketHandler("DoClientTaskEventRequest")] public static void DoClientTaskEventRequestHandler(Session session, byte[] packet) { DoClientTaskEventRequest request = MessagePackSerializer.Deserialize(packet); session.c.Log("DoClientTaskEventRequest" + " " + JsonConvert.SerializeObject(request)); DoClientTaskEventResponse doClientTaskEventResponse = new() { Code = 0 }; session.SendResponse(doClientTaskEventResponse); } [PacketHandler("SignInRequest")] public static void SignInRequestHandler(Session session, byte[] packet) { SignInRequest request = MessagePackSerializer.Deserialize(packet); session.c.Log("SignInRequest" + " " + JsonConvert.SerializeObject(request)); SignInResponse signInResponse = new(); session.SendResponse(signInResponse); } [PacketHandler("GetPurchaseListRequest")] public static void GetPurchaseListRequestHandler(Session session, byte[] packet) { GetPurchaseListRequest request = MessagePackSerializer.Deserialize(packet); session.c.Log("GetPurchaseListRequest" + " " + JsonConvert.SerializeObject(request)); GetPurchaseListResponse getPurchaseListResponse = new(); session.SendResponse(getPurchaseListResponse); } // TODO: Move somewhere else, also split. static void DoLogin(Session session) { NotifyLogin notifyLogin = JsonConvert.DeserializeObject(File.ReadAllText("Data/NotifyLogin.json"))!; session.SendPush(notifyLogin); NotifyDailyLotteryData notifyDailyLotteryData = new(); session.SendPush(notifyDailyLotteryData); NotifyPayInfo notifyPayInfo = new() { TotalPayMoney = 0, IsGetFirstPayReward = false }; session.SendPush(notifyPayInfo); NotifyEquipChipGroupList notifyEquipChipGroupList = new(); session.SendPush(notifyEquipChipGroupList); NotifyEquipChipAutoRecycleSite notifyEquipChipAutoRecycleSite = new() { ChipRecycleSite = new NotifyEquipChipAutoRecycleSite.NotifyEquipChipAutoRecycleSiteChipRecycleSite() }; session.SendPush(notifyEquipChipAutoRecycleSite); NotifyEquipGuideData notifyEquipGuideData = new() { EquipGuideData = new() }; session.SendPush(notifyEquipGuideData); NotifyArchiveLoginData notifyArchiveLoginData = new(); session.SendPush(notifyArchiveLoginData); NotifyChatLoginData notifyChatLoginData = new() { RefreshTime = GetPlaceholderTime() }; session.SendPush(notifyChatLoginData); NotifySocialData notifySocialData = new(); session.SendPush(notifySocialData); NotifyTaskData notifyTaskData = JsonConvert.DeserializeObject(File.ReadAllText("Data/NotifyTaskData.json"))!; //NotifyTaskData notifyTaskData = new() //{ // TaskData = Array.Empty() //}; session.SendPush(notifyTaskData); NotifyActivenessStatus notifyActivenessStatus = new(); session.SendPush(notifyActivenessStatus); NotifyNewPlayerTaskStatus notifyNewPlayerTaskStatus = new() { NewPlayerTaskActiveDay = 1 }; session.SendPush(notifyNewPlayerTaskStatus); NotifyRegression2Data notifyRegression2Data = new() { Data = new NotifyRegression2Data.NotifyRegression2DataData() }; session.SendPush(notifyRegression2Data); NotifyAllRedEnvelope notifyAllRedEnvelope = new(); session.SendPush(notifyAllRedEnvelope); NotifyScoreTitleData notifyScoreTitleData = new(); session.SendPush(notifyScoreTitleData); NotifyBfrtData notifyBfrtData = new() { BfrtData = new() }; session.SendPush(notifyBfrtData); NotifyGuildEvent notifyGuildEvent = new(); session.SendPush(notifyGuildEvent); NotifyAssistData NotifyAssistData = new() { AssistData = new() { AssistCharacterId = 1021001 } }; session.SendPush(NotifyAssistData); NotifyWorkNextRefreshTime notifyWorkNextRefreshTime = new() { NextRefreshTime = GetPlaceholderTime() }; session.SendPush(notifyWorkNextRefreshTime); NotifyDormitoryData notifyDormitoryData = new(); session.SendPush(notifyDormitoryData); NotifyNameplateLoginData notifyNameplateLoginData = new(); session.SendPush(notifyNameplateLoginData); NotifyGuildDormPlayerData notifyGuildDormPlayerData = new() { GuildDormData = new NotifyGuildDormPlayerData.NotifyGuildDormPlayerDataGuildDormData() }; session.SendPush(notifyGuildDormPlayerData); NotifyBountyTaskInfo notifyBountyTaskInfo = new() { TaskInfo = new NotifyBountyTaskInfo.NotifyBountyTaskInfoTaskInfo { RankLevel = 1, TaskPoolRefreshCount = 0 }, RefreshTime = GetPlaceholderTime() }; session.SendPush(notifyBountyTaskInfo); NotifyFiveTwentyRecord notifyFiveTwentyRecord = new(); session.SendPush(notifyFiveTwentyRecord); PurchaseDailyNotify purchaseDailyNotify = new(); session.SendPush(purchaseDailyNotify); NotifyPurchaseRecommendConfig notifyPurchaseRecommendConfig = new() { Data = new NotifyPurchaseRecommendConfig.NotifyPurchaseRecommendConfigData { AddOrModifyConfigs = new(), RemoveIds = Array.Empty() } }; session.SendPush(notifyPurchaseRecommendConfig); NotifyBackgroundLoginData notifyBackgroundLoginData = new(); session.SendPush(notifyBackgroundLoginData); NotifyMedalData notifyMedalData = new(); session.SendPush(notifyMedalData); NotifyExploreData notifyExploreData = new(); session.SendPush(notifyExploreData); NotifyGatherRewardList notifyGatherRewardList = new(); session.SendPush(notifyGatherRewardList); NotifyDrawTicketData notifyDrawTicketData = new(); session.SendPush(notifyDrawTicketData); NotifyAccumulatedPayData notifyAccumulatedPayData = new() { PayId = 1, PayMoney = 0 }; session.SendPush(notifyAccumulatedPayData); NotifyArenaActivity notifyArenaActivity = new(); session.SendPush(notifyArenaActivity); NotifyPrequelUnlockChallengeStages notifyPrequelUnlockChallengeStages = new(); session.SendPush(notifyPrequelUnlockChallengeStages); NotifyPrequelChallengeRefreshTime notifyPrequelChallengeRefreshTime = new() { NextRefreshTime = GetPlaceholderTime() }; session.SendPush(notifyPrequelChallengeRefreshTime); NotifyFubenPrequelData notifyFubenPrequelData = new() { FubenPrequelData = new() }; session.SendPush(notifyFubenPrequelData); NotifyMainLineActivity notifyMainLineActivity = new() { BfrtChapter = 0, EndTime = GetPlaceholderTime(), HideChapterBeginTime = 0 }; session.SendPush(notifyMainLineActivity); NotifyDailyFubenLoginData notifyDailyFubenLoginData = new() { RefreshTime = GetPlaceholderTime() }; session.SendPush(notifyDailyFubenLoginData); NotifyBirthdayPlot notifyBirthdayPlot = new() { NextActiveYear = 2023, IsChange = 1 }; session.SendPush(notifyBirthdayPlot); NotifyBossActivityData notifyBossActivityData = new() { ActivityId = 11, SectionId = 1, Schedule = 0 }; session.SendPush(notifyBossActivityData); NotifyBriefStoryData notifyBriefStoryData = new(); session.SendPush(notifyBriefStoryData); NotifyChessPursuitGroupInfo notifyChessPursuitGroupInfo = new(); session.SendPush(notifyChessPursuitGroupInfo); NotifyClickClearData notifyClickClearData = new(); session.SendPush(notifyClickClearData); NotifyCourseData notifyCourseData = new() { Data = new NotifyCourseData.NotifyCourseDataData { MaxTotalLessonPoint = 0, StageDataDict = new Dictionary(), TotalLessonPoint = 0 } }; session.SendPush(notifyCourseData); NotifyActivityDrawList notifyActivityDrawList = new(); session.SendPush(notifyActivityDrawList); NotifyActivityDrawGroupCount notifyActivityDrawGroupCount = new() { Count = 1 }; session.SendPush(notifyActivityDrawGroupCount); NotifyExperimentData notifyExperimentData = new(); session.SendPush(notifyExperimentData); NotifyBabelTowerActivityStatus notifyBabelTowerActivityStatus = new(); session.SendPush(notifyBabelTowerActivityStatus); NotifyBabelTowerData notifyBabelTowerData = new(); session.SendPush(notifyBabelTowerData); NotifyFubenBossSingleData notifyFubenBossSingleData = new() { FubenBossSingleData = new NotifyFubenBossSingleData.NotifyFubenBossSingleDataFubenBossSingleData() }; session.SendPush(notifyFubenBossSingleData); NotifyFestivalData notifyFestivalData = new(); session.SendPush(notifyFestivalData); NotifyPracticeData notifyPracticeData = new(); session.SendPush(notifyPracticeData); NotifyTrialData notifyTrialData = new(); session.SendPush(notifyTrialData); NotifyPivotCombatData notifyPivotCombatData = new() { PivotCombatData = new NotifyPivotCombatData.NotifyPivotCombatDataPivotCombatData { ActivityId = 0, Difficulty = 0 } }; session.SendPush(notifyPivotCombatData); NotifySettingLoadingOption notifySettingLoadingOption = new() { LoadingData = null }; session.SendPush(notifySettingLoadingOption); NotifyTask notifyTask = new() { TaskLimitIdActiveInfos = Array.Empty() }; NotifyRepeatChallengeData notifyRepeatChallengeData = new() { Id = 20, ExpInfo = new() { Level = 1 } }; session.SendPush(notifyRepeatChallengeData); NotifyPlayerReportData notifyPlayerReportData = new() { ReportData = new NotifyPlayerReportData.NotifyPlayerReportDataReportData() }; session.SendPush(notifyPlayerReportData); NotifyReviewConfig notifyReviewConfig = new(); session.SendPush(notifyReviewConfig); NotifyStrongholdLoginData notifyStrongholdLoginData = new() { Id = 21 }; session.SendPush(notifyStrongholdLoginData); NotifySummerSignInData notifySummerSignInData = new() { ActId = 1, SurplusTimes = 1 }; session.SendPush(notifySummerSignInData); NotifyTaikoMasterData notifyTaikoMasterData = new() { TaikoMasterData = new NotifyTaikoMasterData.NotifyTaikoMasterDataTaikoMasterData() { Setting = new() } }; session.SendPush(notifyTaikoMasterData); NotifyTeachingActivityInfo notifyTeachingActivityInfo = new(); session.SendPush(notifyTeachingActivityInfo); NotifyTheatreData notifyTheatreData = new(); session.SendPush(notifyTheatreData); NotifyVoteData notifyVoteData = new(); session.SendPush(notifyVoteData); NotifyTRPGData notifyTRPGData = new() { BossInfo = new(), BaseInfo = new() { Level = 1 } }; session.SendPush(notifyTRPGData); NotifyBiancaTheatreActivityData notifyBiancaTheatreActivityData = new() { CurActivityId = 1 }; session.SendPush(notifyBiancaTheatreActivityData); NotifyMentorData notifyMentorData = new() { PlayerType = 2, Announcement = "", WeeklyLevel = 28 }; session.SendPush(notifyMentorData); NotifyMentorChat notifyMentorChat = new(); session.SendPush(notifyMentorChat); NotifyMaintainerActionDailyReset notifyMaintainerActionDailyReset = new(); session.SendPush(notifyMaintainerActionDailyReset); NotifyGuildData notifyGuildData = new() { GuildName = string.Empty, GuildRankLevel = 0 }; session.SendPush(notifyGuildData); NotifyMails notifyMails = new(); session.SendPush(notifyMails); NotifyItemDataList notifyItemDataList = new() { ItemRecycleDict = Array.Empty() }; session.SendPush(notifyItemDataList); } static uint GetPlaceholderTime() => (uint)(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeMilliseconds()); } }