From f4a9c7ced58d7cb1adbd29abc04b7c655d6c90a8 Mon Sep 17 00:00:00 2001 From: GEEKiDoS Date: Thu, 7 Mar 2024 16:56:15 +0800 Subject: [PATCH] add more dummy codes --- src/decorators/to-kxml.ts | 59 +++--- src/main.ts | 18 +- src/middlewares/parseKxml.ts | 3 + src/services/IIDX31music/index.ts | 19 ++ src/services/IIDX31pc/index.ts | 257 ++++++++++++++++++++++++++ src/services/IIDX31shop/index.ts | 22 +++ src/services/IIDX31streaming/index.ts | 13 ++ src/services/cardmng/index.ts | 46 +++++ src/types.ts | 7 +- templates/message/get.pug | 6 - templates/pcbtracker/alive.pug | 8 - templates/services/get.pug | 21 --- 12 files changed, 406 insertions(+), 73 deletions(-) create mode 100644 src/services/IIDX31music/index.ts create mode 100644 src/services/IIDX31pc/index.ts create mode 100644 src/services/IIDX31shop/index.ts create mode 100644 src/services/IIDX31streaming/index.ts create mode 100644 src/services/cardmng/index.ts delete mode 100644 templates/message/get.pug delete mode 100644 templates/pcbtracker/alive.pug delete mode 100644 templates/services/get.pug diff --git a/src/decorators/to-kxml.ts b/src/decorators/to-kxml.ts index 54d2c02..51d793f 100644 --- a/src/decorators/to-kxml.ts +++ b/src/decorators/to-kxml.ts @@ -69,6 +69,10 @@ function serializeObject(obj: Object, name: string, linePrefix: string = '') { output += ` __count="${value[1].length}"`; } + if (value && value[1] instanceof Buffer) { + output += ` __size="${value[1].length}"`; + } + output += '>'; if (value) { @@ -121,32 +125,31 @@ export function kxml(topName: string = 'response', encoding: 'UTF-8' | 'SHIFT_JI }; } - -console.log(serializeObject({ - $attr: 'attr1', - sb: { - $attr: 'attr2', - $__type: 'str', - __value: 'sba', - }, - sb1: { - $attr: 'attr3', - nested: { - $attr: 'attr4', - $__type: 's32', - __value: [1, 1, 4, 5, 1, 4], - } - }, - array: [{ - $attr: 'test' - }, { - $attr: 'test2' - }, { - $attr: 'test3' - }, { - $attr: 'test4' - }, { - $attr: 'test5' - }] -}, 'test')) +// console.log(serializeObject({ +// $attr: 'attr1', +// sb: { +// $attr: 'attr2', +// $__type: 'str', +// __value: 'sba', +// }, +// sb1: { +// $attr: 'attr3', +// nested: { +// $attr: 'attr4', +// $__type: 's32', +// __value: [1, 1, 4, 5, 1, 4], +// } +// }, +// array: [{ +// $attr: 'test' +// }, { +// $attr: 'test2' +// }, { +// $attr: 'test3' +// }, { +// $attr: 'test4' +// }, { +// $attr: 'test5' +// }] +// }, 'test')) diff --git a/src/main.ts b/src/main.ts index 5aee030..5c58961 100644 --- a/src/main.ts +++ b/src/main.ts @@ -65,7 +65,8 @@ async function main(): Promise { name: serviceName, method, }; - + + ctx.body = ctx.body[ctx.service.name]; ctx.logger = ctx.service ? register(`logger:${ctx.service.name}`, { useValue: new Logger(ctx.service.name), @@ -101,6 +102,14 @@ async function main(): Promise { } } + logger.info( + '%s.$s [%s]: request = %s', + ctx.service.name, + ctx.service.method, + ctx.pcbid, + JSON.stringify(ctx.request.body), + ); + if (service === undefined || !(method in service)) { logger.warn(`unimplemented method ${ctx.service.method} in ${ctx.service.name}`); @@ -108,13 +117,6 @@ async function main(): Promise { method = 'default'; } - logger.info( - '%s [%s]: request = %s', - ctx.service, - ctx.pcbid, - JSON.stringify(ctx.request.body), - ); - ctx.body = await service[method](ctx); ctx.status = 200; diff --git a/src/middlewares/parseKxml.ts b/src/middlewares/parseKxml.ts index 40df3ef..4cab0dd 100644 --- a/src/middlewares/parseKxml.ts +++ b/src/middlewares/parseKxml.ts @@ -99,6 +99,9 @@ export async function parseKxml(ctx: Context, next: Next): Promise { if ('call' in body) { ctx.pcbid = body.call.srcid; + ctx.tag = body.call.tag; + + ctx.body = body.call; } return next(); diff --git a/src/services/IIDX31music/index.ts b/src/services/IIDX31music/index.ts new file mode 100644 index 0000000..ba357d1 --- /dev/null +++ b/src/services/IIDX31music/index.ts @@ -0,0 +1,19 @@ +import { kxml } from "../../decorators/to-kxml.js"; + +export default class { + @kxml() + async crate() { + return { + IIDX31music: { + $expire: 1800, + c: [ + // { + // $__type: 's32', + // $mid: 11451, + // __value: new Array(20).fill(-1), + // } + ], + } + }; + } +} \ No newline at end of file diff --git a/src/services/IIDX31pc/index.ts b/src/services/IIDX31pc/index.ts new file mode 100644 index 0000000..c0fb1b1 --- /dev/null +++ b/src/services/IIDX31pc/index.ts @@ -0,0 +1,257 @@ +import { kxml } from "../../decorators/to-kxml.js"; +import { Context } from "../../types.js"; + +interface GetPCDataCall { + ccode: string, + cid: string, + ctype: string, + did: string, + lid: string, + pid: string, + rid: string, +} + +export default class { + @kxml() + async common() { + return { + IIDX31pc: { + system_voice_phase: { + $phase: 0, + }, + ir: { + $beat: 0, + }, + vip_pass_black: {}, + common_evnet: { + $flg: -1, + }, + play_video: {}, + music_retry: {}, + display_asio_logo: {}, + lane_gacha: {}, + tourism_booster: {}, + cm_movie_info: { + $type: 3, + }, + monthly_mranking: { + $__type: 'u16', + __value: [], + }, + total_mranking: { + $__type: 'u16', + __value: [], + }, + hitchart: [{ + $kind: 0, + $period: 0, + ranking: [{ + $music_id: 31021, + $rank: 1 + }] + }], + $expire: 180, + } + }; + } + + getPlayerPcData(_: string) { + const data = { + d_auto_adjust: 0, + d_auto_scrach: 0, + d_camera_layout: 0, + d_classic_hispeed: 0, + d_disp_judge: 0, + d_gauge_disp: 0, + d_ghost_score: 0, + d_gno: 0, + d_graph_score: 0, + d_gtype: 0, + d_hispeed: 0.000000, + d_judge: 0, + d_judgeAdj: 0, + d_lane_brignt: 0, + d_liflen: 0, + d_notes: 0.000000, + d_opstyle: 0, + d_pace: 0, + d_sdlen: 0, + d_sdtype: 0, + d_sorttype: 0, + d_sub_gno: 0, + d_timing: 0, + d_timing_split: 0, + d_tsujigiri_disp: 0, + d_visualization: 0, + dach: 0, + dp_opt: 1048577, + dp_opt2: 1048577, + dpnum: 0, + gpos: 0, + id: 0, + idstr: '00000000', + mode: 3, + name: 'MK_', + ngrade: 0, + pid: 48, + player_kind: 0, + pmode: 0, + rtype: 0, + s_auto_adjust: 1, + s_auto_scrach: 0, + s_camera_layout: 0, + s_classic_hispeed: 0, + s_disp_judge: 1, + s_gauge_disp: 0, + s_ghost_score: 0, + s_gno: 0, + s_graph_score: 0, + s_gtype: 1, + s_hispeed: 7.888014, + s_judge: 0, + s_judgeAdj: -22, + s_lane_brignt: 0, + s_liflen: 90, + s_notes: 28.497925, + s_opstyle: 2, + s_pace: 0, + s_sdlen: 258, + s_sdtype: 1, + s_sorttype: 0, + s_sub_gno: 0, + s_timing: 1, + s_timing_split: 1, + s_tsujigiri_disp: 0, + s_visualization: 0, + sach: 49, + sp_opt: 17180950528, + spnum: 2, + }; + + return Object.fromEntries( + Object.entries(data).map(v => ['$' + v[0], v[1]]) + ); + } + + @kxml() + get(ctx: Context) { + const { cid } = ctx.body as GetPCDataCall; + return { + pcdata: this.getPlayerPcData(cid), + bind_eaappli: {}, + secret: { + flg1: { + $__type: 's64', + __value: [-1, -1, 1048575], + }, + flg2: { + $__type: 's64', + __value: [-1, -1, 0], + }, + flg3: { + $__type: 's64', + __value: [-1, -1, 0], + }, + flg4: { + $__type: 's64', + __value: [-1, -1, 0], + }, + }, + favorite: { + sp_mlist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + sp_clist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + dp_mlist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + dp_clist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + }, + extra_favorite: [{ + $folder_id: 0, + sp_mlist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + sp_clist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + dp_mlist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + dp_clist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + }, { + $folder_id: 0, + sp_mlist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + sp_clist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + dp_mlist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + dp_clist: { + $__type: 'bin', + __value: Buffer.alloc(1, 0), + }, + }], + grade: { + $dgid: -1, + $sgid: -1, + g: { + $__type: 'u8', + __value: [0, 13, 3, 58], + } + }, + skin: { + $__type: 's16', + __value: new Array(20).fill(0), + }, + tdjskin: { + $__type: 's16', + __value: [0, 0, 0, 0], + }, + qprodata: { + $__type: 'u32', + __value: [0, 0, 0, 0, 0], + }, + spdp_rival: { + $flg: 1, + }, + rlist: {}, + ex: {}, + secret_course_data: {}, + weekly: { + $mid: 31048, + $wid: 2041, + }, + weekly_score: [], + visitor: { + $anum: 1, + $pnum: 1, + $snum: 1, + $vs_flg: 0, + }, + step: { + + } + } + } +} diff --git a/src/services/IIDX31shop/index.ts b/src/services/IIDX31shop/index.ts new file mode 100644 index 0000000..3bd2c3a --- /dev/null +++ b/src/services/IIDX31shop/index.ts @@ -0,0 +1,22 @@ +import { kxml } from "../../decorators/to-kxml.js"; + +export default class { + @kxml() + async getname() { + return { + IIDX31shop: { + $cls_opt: 14400, + $expire: 0, + $opname: '原神, 启动', + $pid: 30, + } + }; + } + + @kxml() + async sentinfo() { + return { + IIDX31shop: {}, + }; + } +} diff --git a/src/services/IIDX31streaming/index.ts b/src/services/IIDX31streaming/index.ts new file mode 100644 index 0000000..b072d68 --- /dev/null +++ b/src/services/IIDX31streaming/index.ts @@ -0,0 +1,13 @@ +import { kxml } from "../../decorators/to-kxml.js"; + +export default class { + @kxml() + common() { + return { + IIDX31streaming: { + $expire: Math.floor(new Date().valueOf() / 1000) + 259200, + cm_info: {}, + } + }; + } +} diff --git a/src/services/cardmng/index.ts b/src/services/cardmng/index.ts new file mode 100644 index 0000000..643d7e0 --- /dev/null +++ b/src/services/cardmng/index.ts @@ -0,0 +1,46 @@ +import { kxml } from "../../decorators/to-kxml.js"; +import { Context } from "../../types.js"; + +interface CardInquire { + cardid: string, + cardtype: string, +} + +interface CardAuth { + pass: string, + refid: string, +} + +export default class { + @kxml() + inquire(ctx: Context) { + const { cardid, cardtype } = ctx.body as CardInquire; + ctx.logger.info('card %s (type %d) inquire', cardid, cardtype); + + return { + cardmng: { + $binded: 1, + $dataid: cardid, + $ecflag: 1, + $expired: 0, + $method: 'inquire', + $newflag: 0, + $refid: cardid, + $status: 0, + } + }; + } + + @kxml() + authpass(ctx: Context) { + const { refid, pass } = ctx.body as CardAuth; + ctx.logger.info('auth %s with pass %s', refid, pass); + + return { + $cardmng: { + method: 'authpass', + status: 0, + } + }; + } +} diff --git a/src/types.ts b/src/types.ts index 0795332..7e95b9b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,11 +3,14 @@ import { DefaultState, ParameterizedContext } from 'koa'; export interface ILaochanContext { model?: string; - service?: { + tag?: string; + pcbid?: string; + + service: { name: string, method: string, }; - pcbid?: string; + logger: Logger; request: { diff --git a/templates/message/get.pug b/templates/message/get.pug deleted file mode 100644 index f80d34f..0000000 --- a/templates/message/get.pug +++ /dev/null @@ -1,6 +0,0 @@ -response - message( - expire=expire, - method="get", - status=status, - ) diff --git a/templates/pcbtracker/alive.pug b/templates/pcbtracker/alive.pug deleted file mode 100644 index 0b60f97..0000000 --- a/templates/pcbtracker/alive.pug +++ /dev/null @@ -1,8 +0,0 @@ -response - pcbtracker( - ecenable=ecEnable, - expire=expire, - method="alive", - status=status, - time=time, - ) diff --git a/templates/services/get.pug b/templates/services/get.pug deleted file mode 100644 index a4ff88e..0000000 --- a/templates/services/get.pug +++ /dev/null @@ -1,21 +0,0 @@ -response - services(expire=43200 method="get" mode="operation" product_domain=1 status=0) - item(name="keepalive" url=keepaliveUrl) - item(name="ntp" url=ntpUrl) - item(name="services" url=selfUrl) - item(name="dlstatus" url=selfUrl) - item(name="cardmng" url=selfUrl) - item(name="eacoin" url=selfUrl) - item(name="userdata" url=selfUrl) - item(name="userid" url=selfUrl) - item(name="pcbtracker" url=selfUrl) - item(name="pcbevent" url=selfUrl) - item(name="message" url=selfUrl) - item(name="facility" url=selfUrl) - item(name="apsmanager" url=selfUrl) - item(name="sidmgr" url=selfUrl) - item(name="package" url=selfUrl) - item(name="uploader" url=selfUrl) - item(name="local" url=selfUrl) - item(name="local2" url=selfUrl) - item(name="lobby" url=selfUrl)