feat: Action 호출 타입 설계

- 호출 시점에선 강타입으로.
This commit is contained in:
2024-03-09 17:45:14 +00:00
parent fb68d9be22
commit b449cf3a11
5 changed files with 120 additions and 18 deletions
@@ -0,0 +1,62 @@
import type { IResourceController } from "@/IResourceController.js";
import type { CityID, GeneralID, NationID, TroopID } from "@/defs.js";
import { NotYetImplemented } from "@sammo/util";
export type QueueType = 'server' | 'api';
//type QueueType = 'server' | 'npc' | 'api';
export function setDefenceTrained(invoker: QueueType, arg: { generalID: GeneralID, defenceTrained: number }, rsc: IResourceController): void{
throw new NotYetImplemented();
}
export function kickTroopMember(invoker: QueueType, arg: { nationID: NationID, troopID: TroopID, memberID: GeneralID }, rsc: IResourceController): void {
throw new NotYetImplemented();
}
export function blockAttackCommand(invoker: QueueType, arg: { nationID: NationID, block: boolean }, rsc: IResourceController): void {
throw new NotYetImplemented();
}
export function blockJoinNation(invoker: QueueType, arg: { nationID: NationID, block: boolean }, rsc: IResourceController): void {
throw new NotYetImplemented();
}
export function createGeneral(invoker: QueueType, arg: {
//유산 값등은 외부에서 처리하고 내부에는 순수 랜덤류만 입력
name: string,
ownerID: number,
ownerName: string,
leadership: number,
strength: number,
intel: number,
pic: string
character: string
turntimeZone?: number,
warSpecial?: string,
city?: CityID,
bonusStat?: [number, number, number],
//penalty: Record<GeneralPenalty, number>,
}, rsc: IResourceController):void{
throw new NotYetImplemented();
}
type ActionFunc<Arg extends Record<string, any>, Res> = (invoker: QueueType, arg: Arg, rsc: IResourceController)=>Res;
export type ActionPackDef = {
[key: string]: ActionFunc<any, any>
}
export const ActionRequestList = {
setDefenceTrained,
kickTroopMember,
blockAttackCommand,
blockJoinNation,
createGeneral,
} as const satisfies ActionPackDef;
export type ActionRequestKey = keyof typeof ActionRequestList;
export type ActionMainArg<T extends ActionRequestKey> = Parameters<typeof ActionRequestList[T]>[1];
export type ActionRes<T extends ActionRequestKey> = ReturnType<typeof ActionRequestList[T]>;
+1 -1
View File
@@ -1,6 +1,6 @@
export * from "./LogicFunc/generalStats.js";
export * as defs from "./defs.js";
export * from "./IResourceController.js";
export * from "./ActionRequest/index.js";
// NOTE: game_logic은 client, server 모두에서 사용되는 라이브러리이다.
// DB에 접근한다면 DI여야하나?