Commit 6ba3347f authored by 水濑真白's avatar 水濑真白

chore: use koishipro-core noParse in worker and reparse raw for transport

parent 2db21e1d
Pipeline #43163 passed with stages
in 57 seconds
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
"http-proxy-agent": "^7.0.2", "http-proxy-agent": "^7.0.2",
"https-proxy-agent": "^7.0.6", "https-proxy-agent": "^7.0.6",
"ipaddr.js": "^2.3.0", "ipaddr.js": "^2.3.0",
"koishipro-core.js": "^1.3.2", "koishipro-core.js": "^1.3.3",
"nfkit": "^1.0.27", "nfkit": "^1.0.27",
"p-queue": "6.6.2", "p-queue": "6.6.2",
"pino": "^10.3.1", "pino": "^10.3.1",
...@@ -5102,9 +5102,9 @@ ...@@ -5102,9 +5102,9 @@
} }
}, },
"node_modules/koishipro-core.js": { "node_modules/koishipro-core.js": {
"version": "1.3.2", "version": "1.3.3",
"resolved": "https://registry.npmjs.org/koishipro-core.js/-/koishipro-core.js-1.3.2.tgz", "resolved": "https://registry.npmjs.org/koishipro-core.js/-/koishipro-core.js-1.3.3.tgz",
"integrity": "sha512-eVDBwxLv2rFp4O5A7gh6kZZTjJ/cXQMqgd+gBXyNVPL0H6PX4Q+NVF+1Mq1Du/AtYhVr3FgJzDDmvPtPOQ2/LQ==", "integrity": "sha512-7CrTOJj3+AIZ4QilYgEqK15SoremQed+HH5mB5wqX5O/ocS+fgensCtSmXtoF/F8Frqq/SCXv5yYTQVH0nJHrQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/emscripten": "^1.41.5", "@types/emscripten": "^1.41.5",
......
...@@ -6,6 +6,9 @@ import { ...@@ -6,6 +6,9 @@ import {
DirScriptReaderEx, DirScriptReaderEx,
DirCardReader, DirCardReader,
_OcgcoreConstants, _OcgcoreConstants,
parseCardQuery,
parseFieldCardQuery,
parseFieldInfo,
} from 'koishipro-core.js'; } from 'koishipro-core.js';
import type { import type {
OcgcoreQueryCardParams, OcgcoreQueryCardParams,
...@@ -201,12 +204,25 @@ export class OcgcoreWorker { ...@@ -201,12 +204,25 @@ export class OcgcoreWorker {
@WorkerMethod() @WorkerMethod()
@TransportEncoder<OcgcoreProcessResult, SerializableProcessResult>( @TransportEncoder<OcgcoreProcessResult, SerializableProcessResult>(
(result) => ({ (result) => {
length: result.length, // Re-parse from raw at encode time, so worker-side core calls can use noParse.
raw: result.raw, let messagePayload: Uint8Array | undefined;
status: result.status, if (result.raw.length > 0) {
messagePayload: result.message?.toPayload(), try {
}), messagePayload = YGOProMessages.getInstanceFromPayload(
result.raw,
).toPayload();
} catch {
messagePayload = undefined;
}
}
return {
length: result.length,
raw: result.raw,
status: result.status,
messagePayload,
};
},
(serialized) => ({ (serialized) => ({
length: serialized.length, length: serialized.length,
raw: serialized.raw, raw: serialized.raw,
...@@ -217,7 +233,7 @@ export class OcgcoreWorker { ...@@ -217,7 +233,7 @@ export class OcgcoreWorker {
}), }),
) )
async process(): Promise<OcgcoreProcessResult> { async process(): Promise<OcgcoreProcessResult> {
return this.duel.process(); return this.duel.process({ noParse: true });
} }
@WorkerMethod() @WorkerMethod()
...@@ -232,11 +248,14 @@ export class OcgcoreWorker { ...@@ -232,11 +248,14 @@ export class OcgcoreWorker {
@WorkerMethod() @WorkerMethod()
@TransportEncoder<OcgcoreCardQueryResult, SerializableCardQueryResult>( @TransportEncoder<OcgcoreCardQueryResult, SerializableCardQueryResult>(
(result) => ({ (result) => {
length: result.length, const card = parseCardQuery(result.raw, result.length);
raw: result.raw, return {
cardPayload: result.card?.toPayload() ?? null, length: result.length,
}), raw: result.raw,
cardPayload: card ? card.toPayload() : null,
};
},
(serialized) => ({ (serialized) => ({
length: serialized.length, length: serialized.length,
raw: serialized.raw, raw: serialized.raw,
...@@ -248,7 +267,7 @@ export class OcgcoreWorker { ...@@ -248,7 +267,7 @@ export class OcgcoreWorker {
async queryCard( async queryCard(
@TransportType() query: OcgcoreQueryCardParams, @TransportType() query: OcgcoreQueryCardParams,
): Promise<OcgcoreCardQueryResult> { ): Promise<OcgcoreCardQueryResult> {
return this.duel.queryCard(query); return this.duel.queryCard(query, { noParse: true });
} }
@WorkerMethod() @WorkerMethod()
...@@ -263,11 +282,14 @@ export class OcgcoreWorker { ...@@ -263,11 +282,14 @@ export class OcgcoreWorker {
OcgcoreFieldCardQueryResult, OcgcoreFieldCardQueryResult,
SerializableFieldCardQueryResult SerializableFieldCardQueryResult
>( >(
(result) => ({ (result) => {
length: result.length, const cards = parseFieldCardQuery(result.raw, result.length);
raw: result.raw, return {
cardsPayload: result.cards.map((card) => card.toPayload()), length: result.length,
}), raw: result.raw,
cardsPayload: cards.map((card) => card.toPayload()),
};
},
(serialized) => ({ (serialized) => ({
length: serialized.length, length: serialized.length,
raw: serialized.raw, raw: serialized.raw,
...@@ -279,7 +301,7 @@ export class OcgcoreWorker { ...@@ -279,7 +301,7 @@ export class OcgcoreWorker {
async queryFieldCard( async queryFieldCard(
@TransportType() query: OcgcoreQueryFieldCardParams, @TransportType() query: OcgcoreQueryFieldCardParams,
): Promise<OcgcoreFieldCardQueryResult> { ): Promise<OcgcoreFieldCardQueryResult> {
return this.duel.queryFieldCard(query); return this.duel.queryFieldCard(query, { noParse: true });
} }
@WorkerMethod() @WorkerMethod()
...@@ -287,7 +309,7 @@ export class OcgcoreWorker { ...@@ -287,7 +309,7 @@ export class OcgcoreWorker {
(result) => ({ (result) => ({
length: result.length, length: result.length,
raw: result.raw, raw: result.raw,
fieldPayload: result.field.toPayload(), fieldPayload: parseFieldInfo(result.raw).toPayload(),
}), }),
(serialized) => ({ (serialized) => ({
length: serialized.length, length: serialized.length,
...@@ -298,18 +320,30 @@ export class OcgcoreWorker { ...@@ -298,18 +320,30 @@ export class OcgcoreWorker {
}), }),
) )
async queryFieldInfo(): Promise<OcgcoreFieldInfoResult> { async queryFieldInfo(): Promise<OcgcoreFieldInfoResult> {
return this.duel.queryFieldInfo(); return this.duel.queryFieldInfo({ noParse: true });
} }
@WorkerMethod() @WorkerMethod()
@TransportEncoder<OcgcoreProcessResult[], SerializableProcessResult[]>( @TransportEncoder<OcgcoreProcessResult[], SerializableProcessResult[]>(
(results) => (results) =>
results.map((result) => ({ results.map((result) => {
length: result.length, let messagePayload: Uint8Array | undefined;
raw: result.raw, if (result.raw.length > 0) {
status: result.status, try {
messagePayload: result.message?.toPayload(), messagePayload = YGOProMessages.getInstanceFromPayload(
})), result.raw,
).toPayload();
} catch {
messagePayload = undefined;
}
}
return {
length: result.length,
raw: result.raw,
status: result.status,
messagePayload,
};
}),
(serializedArray) => (serializedArray) =>
serializedArray.map((serialized) => ({ serializedArray.map((serialized) => ({
length: serialized.length, length: serialized.length,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment