93 lines
4.8 KiB
Zig
93 lines
4.8 KiB
Zig
const std = @import("std");
|
|
const protocol = @import("protocol");
|
|
const Session = @import("Session.zig");
|
|
const Packet = @import("Packet.zig");
|
|
const avatar = @import("services/avatar.zig");
|
|
const battle = @import("services/battle.zig");
|
|
const login = @import("services/login.zig");
|
|
const lineup = @import("services/lineup.zig");
|
|
const mission = @import("services/mission.zig");
|
|
const scene = @import("services/scene.zig");
|
|
const misc = @import("services/misc.zig");
|
|
|
|
const Allocator = std.mem.Allocator;
|
|
const ArenaAllocator = std.heap.ArenaAllocator;
|
|
const CmdID = protocol.CmdID;
|
|
|
|
const Action = *const fn (*Session, *const Packet, Allocator) anyerror!void;
|
|
const HandlerList = [_]struct { CmdID, Action }{
|
|
.{ CmdID.CmdPlayerGetTokenCsReq, login.onPlayerGetToken },
|
|
.{ CmdID.CmdPlayerLoginCsReq, login.onPlayerLogin },
|
|
.{ CmdID.CmdPlayerHeartBeatCsReq, misc.onPlayerHeartBeat },
|
|
.{ CmdID.CmdGetAvatarDataCsReq, avatar.onGetAvatarData },
|
|
.{ CmdID.CmdGetMissionStatusCsReq, mission.onGetMissionStatus },
|
|
.{ CmdID.CmdGetCurLineupDataCsReq, lineup.onGetCurLineupData },
|
|
.{ CmdID.CmdGetCurSceneInfoCsReq, scene.onGetCurSceneInfo },
|
|
.{ CmdID.CmdSceneEntityMoveCsReq, scene.onSceneEntityMove },
|
|
.{ CmdID.CmdStartCocoonStageCsReq, battle.onStartCocoonStage },
|
|
.{ CmdID.CmdPVEBattleResultCsReq, battle.onPVEBattleResult },
|
|
};
|
|
|
|
const DummyCmdList = [_]struct { CmdID, CmdID }{
|
|
.{ CmdID.CmdGetBasicInfoCsReq, CmdID.CmdGetBasicInfoScRsp },
|
|
.{ CmdID.CmdGetMultiPathAvatarInfoCsReq, CmdID.CmdGetMultiPathAvatarInfoScRsp },
|
|
.{ CmdID.CmdGetBagCsReq, CmdID.CmdGetBagScRsp },
|
|
.{ CmdID.CmdGetMarkItemListCsReq, CmdID.CmdGetMarkItemListScRsp },
|
|
.{ CmdID.CmdGetPlayerBoardDataCsReq, CmdID.CmdGetPlayerBoardDataScRsp },
|
|
.{ CmdID.CmdGetCurAssistCsReq, CmdID.CmdGetCurAssistScRsp },
|
|
.{ CmdID.CmdGetAllLineupDataCsReq, CmdID.CmdGetAllLineupDataScRsp },
|
|
.{ CmdID.CmdGetAllServerPrefsDataCsReq, CmdID.CmdGetAllServerPrefsDataScRsp },
|
|
.{ CmdID.CmdGetActivityScheduleConfigCsReq, CmdID.CmdGetActivityScheduleConfigScRsp },
|
|
.{ CmdID.CmdGetMissionDataCsReq, CmdID.CmdGetMissionDataScRsp },
|
|
.{ CmdID.CmdGetMissionEventDataCsReq, CmdID.CmdGetMissionEventDataScRsp },
|
|
.{ CmdID.CmdGetQuestDataCsReq, CmdID.CmdGetQuestDataScRsp },
|
|
.{ CmdID.CmdGetCurChallengeCsReq, CmdID.CmdGetCurChallengeScRsp },
|
|
.{ CmdID.CmdGetRogueCommonDialogueDataCsReq, CmdID.CmdGetRogueCommonDialogueDataScRsp },
|
|
.{ CmdID.CmdGetRogueInfoCsReq, CmdID.CmdGetRogueInfoScRsp },
|
|
.{ CmdID.CmdGetRogueHandbookDataCsReq, CmdID.CmdGetRogueHandbookDataScRsp },
|
|
.{ CmdID.CmdGetRogueEndlessActivityDataCsReq, CmdID.CmdGetRogueEndlessActivityDataScRsp },
|
|
.{ CmdID.CmdChessRogueQueryCsReq, CmdID.CmdChessRogueQueryScRsp },
|
|
.{ CmdID.CmdRogueTournQueryCsReq, CmdID.CmdRogueTournQueryScRsp },
|
|
.{ CmdID.CmdSyncClientResVersionCsReq, CmdID.CmdSyncClientResVersionScRsp },
|
|
.{ CmdID.CmdDailyFirstMeetPamCsReq, CmdID.CmdDailyFirstMeetPamScRsp },
|
|
.{ CmdID.CmdGetBattleCollegeDataCsReq, CmdID.CmdGetBattleCollegeDataScRsp },
|
|
.{ CmdID.CmdGetNpcStatusCsReq, CmdID.CmdGetNpcStatusScRsp },
|
|
.{ CmdID.CmdGetSecretKeyInfoCsReq, CmdID.CmdGetSecretKeyInfoScRsp },
|
|
.{ CmdID.CmdGetHeartDialInfoCsReq, CmdID.CmdGetHeartDialInfoScRsp },
|
|
.{ CmdID.CmdGetVideoVersionKeyCsReq, CmdID.CmdGetVideoVersionKeyScRsp },
|
|
.{ CmdID.CmdGetCurBattleInfoCsReq, CmdID.CmdGetCurBattleInfoScRsp },
|
|
.{ CmdID.CmdHeliobusActivityDataCsReq, CmdID.CmdHeliobusActivityDataScRsp },
|
|
.{ CmdID.CmdGetEnteredSceneCsReq, CmdID.CmdGetEnteredSceneScRsp },
|
|
.{ CmdID.CmdGetAetherDivideInfoCsReq, CmdID.CmdGetAetherDivideInfoScRsp },
|
|
.{ CmdID.CmdGetMapRotationDataCsReq, CmdID.CmdGetMapRotationDataScRsp },
|
|
.{ CmdID.CmdGetRogueCollectionCsReq, CmdID.CmdGetRogueCollectionScRsp },
|
|
.{ CmdID.CmdGetRogueExhibitionCsReq, CmdID.CmdGetRogueExhibitionScRsp },
|
|
.{ CmdID.CmdPlayerReturnInfoQueryCsReq, CmdID.CmdPlayerReturnInfoQueryScRsp },
|
|
.{ CmdID.CmdPlayerLoginFinishCsReq, CmdID.CmdPlayerLoginFinishScRsp },
|
|
.{ CmdID.CmdGetLevelRewardTakenListCsReq, CmdID.CmdGetLevelRewardTakenListScRsp },
|
|
.{ CmdID.CmdGetMainMissionCustomValueCsReq, CmdID.CmdGetMainMissionCustomValueScRsp },
|
|
};
|
|
|
|
pub fn handle(session: *Session, packet: *const Packet) !void {
|
|
var arena = ArenaAllocator.init(session.allocator);
|
|
defer arena.deinit();
|
|
|
|
const cmd_id: CmdID = @enumFromInt(packet.cmd_id);
|
|
|
|
inline for (HandlerList) |handler| {
|
|
if (handler[0] == cmd_id) {
|
|
try handler[1](session, packet, arena.allocator());
|
|
std.log.debug("packet {} was handled", .{cmd_id});
|
|
return;
|
|
}
|
|
}
|
|
|
|
inline for (DummyCmdList) |pair| {
|
|
if (pair[0] == cmd_id) {
|
|
try session.send_empty(pair[1]);
|
|
return;
|
|
}
|
|
}
|
|
|
|
std.log.warn("packet {} was ignored", .{cmd_id});
|
|
}
|