Commit ab9e3c3d authored by nanahira's avatar nanahira

remove some unused libs & migrate game msg to ygopro-msg-encode

parent ec34713f
...@@ -9,6 +9,7 @@ const load_constants_1 = __importDefault(require("./load-constants")); ...@@ -9,6 +9,7 @@ const load_constants_1 = __importDefault(require("./load-constants"));
const ygopro_msg_encode_1 = require("ygopro-msg-encode"); const ygopro_msg_encode_1 = require("ygopro-msg-encode");
const ygopro_msg_struct_compat_1 = require("./ygopro-msg-struct-compat"); const ygopro_msg_struct_compat_1 = require("./ygopro-msg-struct-compat");
const proto_structs_json_1 = __importDefault(require("./data/proto_structs.json")); const proto_structs_json_1 = __importDefault(require("./data/proto_structs.json"));
const utility_1 = require("./utility");
class Handler { class Handler {
constructor(handler, synchronous) { constructor(handler, synchronous) {
this.handler = handler; this.handler = handler;
...@@ -38,15 +39,7 @@ class LegacyStructInst { ...@@ -38,15 +39,7 @@ class LegacyStructInst {
return; return;
const inst = (0, ygopro_msg_struct_compat_1.applyYGOProMsgStructCompat)(new this.cls().fromPayload(this.buffer)); const inst = (0, ygopro_msg_struct_compat_1.applyYGOProMsgStructCompat)(new this.cls().fromPayload(this.buffer));
inst[field] = value; inst[field] = value;
const parsed = Buffer.from(inst.toPayload()); (0, utility_1.overwriteBuffer)(this.buffer, inst.toPayload());
if (parsed.length >= this.buffer.length) {
// slice it down
parsed.copy(this.buffer, 0, 0, this.buffer.length);
}
else {
// copy a small part only
parsed.copy(this.buffer, 0, 0, parsed.length);
}
} }
} }
exports.LegacyStructInst = LegacyStructInst; exports.LegacyStructInst = LegacyStructInst;
......
...@@ -4,6 +4,7 @@ import net from "net"; ...@@ -4,6 +4,7 @@ import net from "net";
import { YGOProCtos, YGOProCtosBase, YGOProStoc, YGOProStocBase } from "ygopro-msg-encode"; import { YGOProCtos, YGOProCtosBase, YGOProStoc, YGOProStocBase } from "ygopro-msg-encode";
import { applyYGOProMsgStructCompat, fromPartialCompat } from "./ygopro-msg-struct-compat"; import { applyYGOProMsgStructCompat, fromPartialCompat } from "./ygopro-msg-struct-compat";
import legacyProtoStructs from "./data/proto_structs.json"; import legacyProtoStructs from "./data/proto_structs.json";
import { overwriteBuffer } from "./utility";
class Handler { class Handler {
...@@ -82,14 +83,7 @@ export class LegacyStructInst { ...@@ -82,14 +83,7 @@ export class LegacyStructInst {
if (!this.buffer || !this.cls) return; if (!this.buffer || !this.cls) return;
const inst = applyYGOProMsgStructCompat(new this.cls().fromPayload(this.buffer)); const inst = applyYGOProMsgStructCompat(new this.cls().fromPayload(this.buffer));
inst[field] = value; inst[field] = value;
const parsed = Buffer.from(inst.toPayload()); overwriteBuffer(this.buffer, inst.toPayload());
if (parsed.length >= this.buffer.length) {
// slice it down
parsed.copy(this.buffer, 0, 0, this.buffer.length);
} else {
// copy a small part only
parsed.copy(this.buffer, 0, 0, parsed.length);
}
} }
} }
......
This diff is collapsed.
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
"author": "zh99998 <zh99998@gmail.com>, mercury233 <me@mercury233.me>, Nanahira <78877@qq.com>", "author": "zh99998 <zh99998@gmail.com>, mercury233 <me@mercury233.me>, Nanahira <78877@qq.com>",
"dependencies": { "dependencies": {
"aragami": "^1.2.5", "aragami": "^1.2.5",
"async": "^3.2.0",
"axios": "^0.19.2", "axios": "^0.19.2",
"bunyan": "^1.8.14", "bunyan": "^1.8.14",
"deepmerge": "^4.2.2", "deepmerge": "^4.2.2",
...@@ -25,8 +24,6 @@ ...@@ -25,8 +24,6 @@
"mysql": "^2.18.1", "mysql": "^2.18.1",
"node-os-utils": "^1.3.2", "node-os-utils": "^1.3.2",
"p-queue": "^6.6.2", "p-queue": "^6.6.2",
"pg": "^6.4.2",
"q": "^1.5.1",
"querystring": "^0.2.0", "querystring": "^0.2.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"request": "^2.88.2", "request": "^2.88.2",
...@@ -36,7 +33,7 @@ ...@@ -36,7 +33,7 @@
"underscore.string": "^3.3.6", "underscore.string": "^3.3.6",
"ws": "^8.9.0", "ws": "^8.9.0",
"ygopro-deck-encode": "^1.0.15", "ygopro-deck-encode": "^1.0.15",
"ygopro-msg-encode": "^1.1.5", "ygopro-msg-encode": "^1.1.6",
"ygopro-yrp-encode": "^1.0.1" "ygopro-yrp-encode": "^1.0.1"
}, },
"license": "AGPL-3.0", "license": "AGPL-3.0",
...@@ -49,7 +46,6 @@ ...@@ -49,7 +46,6 @@
"webhook": "node ygopro-webhook.js" "webhook": "node ygopro-webhook.js"
}, },
"devDependencies": { "devDependencies": {
"@types/async": "^3.2.25",
"@types/bunyan": "^1.8.8", "@types/bunyan": "^1.8.8",
"@types/formidable": "^3.4.6", "@types/formidable": "^3.4.6",
"@types/ip6addr": "^0.2.3", "@types/ip6addr": "^0.2.3",
......
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.overwriteBuffer = void 0;
exports.retry = retry; exports.retry = retry;
async function retry(fn, count, delayFn = (attempt) => Math.pow(2, attempt) * 100) { async function retry(fn, count, delayFn = (attempt) => Math.pow(2, attempt) * 100) {
let lastError; let lastError;
...@@ -18,3 +19,13 @@ async function retry(fn, count, delayFn = (attempt) => Math.pow(2, attempt) * 10 ...@@ -18,3 +19,13 @@ async function retry(fn, count, delayFn = (attempt) => Math.pow(2, attempt) * 10
// 如果全部尝试失败,抛出最后一个错误 // 如果全部尝试失败,抛出最后一个错误
throw lastError; throw lastError;
} }
const overwriteBuffer = (buf, _input) => {
const input = Buffer.isBuffer(_input) ? _input : Buffer.from(_input);
if (input.length >= buf.length) {
input.copy(buf, 0, 0, buf.length);
}
else {
input.copy(buf, 0, 0, input.length);
}
};
exports.overwriteBuffer = overwriteBuffer;
...@@ -20,3 +20,13 @@ export async function retry<T>( ...@@ -20,3 +20,13 @@ export async function retry<T>(
// 如果全部尝试失败,抛出最后一个错误 // 如果全部尝试失败,抛出最后一个错误
throw lastError; throw lastError;
} }
export const overwriteBuffer = (buf: Buffer, _input: Buffer | Uint8Array) => {
const input = Buffer.isBuffer(_input) ? _input : Buffer.from(_input);
if (input.length >= buf.length) {
input.copy(buf, 0, 0, buf.length);
} else {
input.copy(buf, 0, 0, input.length);
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -51,7 +51,6 @@ const axios_1 = __importDefault(require("axios")); ...@@ -51,7 +51,6 @@ const axios_1 = __importDefault(require("axios"));
const formidable = __importStar(require("formidable")); const formidable = __importStar(require("formidable"));
const load_json_file_1 = require("load-json-file"); const load_json_file_1 = require("load-json-file");
const challonge_1 = require("./challonge"); const challonge_1 = require("./challonge");
const asyncLib = __importStar(require("async"));
const ygopro_deck_encode_1 = __importDefault(require("ygopro-deck-encode")); const ygopro_deck_encode_1 = __importDefault(require("ygopro-deck-encode"));
const auth = __importStar(require("./ygopro-auth")); const auth = __importStar(require("./ygopro-auth"));
const underscore_1 = __importDefault(require("underscore")); const underscore_1 = __importDefault(require("underscore"));
...@@ -114,27 +113,21 @@ const readDeck = async function (deck_name, deck_full_path) { ...@@ -114,27 +113,21 @@ const readDeck = async function (deck_name, deck_full_path) {
return deck; return deck;
}; };
//读取指定文件夹中所有卡组 //读取指定文件夹中所有卡组
const getDecks = function (callback) { const getDecks = async function (callback) {
const decks = []; try {
asyncLib.auto({ const decks = [];
readDir: (done) => { const decks_list = await fs.promises.readdir(config.deck_path);
fs.readdir(config.deck_path, done); for (const deck_name of decks_list) {
}, if (deck_name.endsWith(".ydk")) {
handleDecks: [ const deck = await readDeck(deck_name, config.deck_path + deck_name);
"readDir", decks.push(deck);
(results, done) => { }
const decks_list = results.readDir; }
asyncLib.each(decks_list, async (deck_name) => { callback(null, decks);
if (deck_name.endsWith(".ydk")) { }
const deck = await readDeck(deck_name, config.deck_path + deck_name); catch (err) {
decks.push(deck); callback(err, []);
} }
}, done);
},
],
}, (err) => {
callback(err, decks);
});
}; };
const delDeck = function (deck_name, callback) { const delDeck = function (deck_name, callback) {
if (deck_name.startsWith("../") || deck_name.match(/\/\.\.\//)) { if (deck_name.startsWith("../") || deck_name.match(/\/\.\.\//)) {
...@@ -143,19 +136,19 @@ const delDeck = function (deck_name, callback) { ...@@ -143,19 +136,19 @@ const delDeck = function (deck_name, callback) {
} }
fs.unlink(config.deck_path + deck_name, callback); fs.unlink(config.deck_path + deck_name, callback);
}; };
const clearDecks = function (callback) { const clearDecks = async function (callback) {
asyncLib.auto({ try {
deckList: (done) => { const decks_list = await fs.promises.readdir(config.deck_path);
fs.readdir(config.deck_path, done); for (const deck_name of decks_list) {
}, await new Promise((resolve, reject) => {
removeAll: [ delDeck(deck_name, (err) => (err ? reject(err) : resolve()));
"deckList", });
(results, done) => { }
const decks_list = results.deckList; callback(null);
asyncLib.each(decks_list, delDeck, done); }
}, catch (err) {
], callback(err);
}, callback); }
}; };
const UploadToChallonge = async function () { const UploadToChallonge = async function () {
if (!challonge_config.enabled) { if (!challonge_config.enabled) {
...@@ -194,34 +187,38 @@ const UploadToChallonge = async function () { ...@@ -194,34 +187,38 @@ const UploadToChallonge = async function () {
} }
return true; return true;
}; };
const receiveDecks = function (files, callback) { const receiveDecks = async function (files, callback) {
const result = []; try {
asyncLib.eachSeries(files, async (file) => { const result = [];
if (file.name.endsWith(".ydk")) { for (const file of files) {
const deck = await readDeck(file.name, file.path); if (file.name.endsWith(".ydk")) {
if (deck.main.length >= 40) { const deck = await readDeck(file.name, file.path);
fs.createReadStream(file.path).pipe(fs.createWriteStream(config.deck_path + file.name)); if (deck.main.length >= 40) {
result.push({ fs.createReadStream(file.path).pipe(fs.createWriteStream(config.deck_path + file.name));
file: file.name, result.push({
status: "OK", file: file.name,
}); status: "OK",
});
}
else {
result.push({
file: file.name,
status: "卡组不合格",
});
}
} }
else { else {
result.push({ result.push({
file: file.name, file: file.name,
status: "卡组不合格", status: "不是卡组文件",
}); });
} }
} }
else { callback(null, result);
result.push({ }
file: file.name, catch (err) {
status: "不是卡组文件", callback(err, []);
}); }
}
}, (err) => {
callback(err, result);
});
}; };
//建立一个http服务器,接收API操作 //建立一个http服务器,接收API操作
async function requestListener(req, res) { async function requestListener(req, res) {
......
...@@ -15,7 +15,6 @@ import * as formidable from "formidable"; ...@@ -15,7 +15,6 @@ import * as formidable from "formidable";
import { sync as loadJSON } from "load-json-file"; import { sync as loadJSON } from "load-json-file";
import defaultConfig from "./data/default_config.json"; import defaultConfig from "./data/default_config.json";
import { Challonge } from "./challonge"; import { Challonge } from "./challonge";
import * as asyncLib from "async";
import YGOProDeckEncode from "ygopro-deck-encode"; import YGOProDeckEncode from "ygopro-deck-encode";
import * as auth from "./ygopro-auth"; import * as auth from "./ygopro-auth";
import _ from "underscore"; import _ from "underscore";
...@@ -82,34 +81,20 @@ const readDeck = async function (deck_name: string, deck_full_path: string) { ...@@ -82,34 +81,20 @@ const readDeck = async function (deck_name: string, deck_full_path: string) {
}; };
//读取指定文件夹中所有卡组 //读取指定文件夹中所有卡组
const getDecks = function (callback: (err: Error | null, decks: any[]) => void) { const getDecks = async function (callback: (err: Error | null, decks: any[]) => void) {
const decks: any[] = []; try {
asyncLib.auto( const decks: any[] = [];
{ const decks_list = await fs.promises.readdir(config.deck_path);
readDir: (done: (err: NodeJS.ErrnoException | null, files?: string[]) => void) => { for (const deck_name of decks_list) {
fs.readdir(config.deck_path, done); if (deck_name.endsWith(".ydk")) {
}, const deck = await readDeck(deck_name, config.deck_path + deck_name);
handleDecks: [ decks.push(deck);
"readDir", }
(results: any, done: (err?: Error | null) => void) => {
const decks_list = results.readDir as string[];
asyncLib.each(
decks_list,
async (deck_name: string) => {
if (deck_name.endsWith(".ydk")) {
const deck = await readDeck(deck_name, config.deck_path + deck_name);
decks.push(deck);
}
},
done
);
},
],
},
(err: Error | null) => {
callback(err, decks);
} }
); callback(null, decks);
} catch (err) {
callback(err as Error, []);
}
}; };
const delDeck = function (deck_name: string, callback: (err?: NodeJS.ErrnoException | null) => void) { const delDeck = function (deck_name: string, callback: (err?: NodeJS.ErrnoException | null) => void) {
...@@ -120,22 +105,18 @@ const delDeck = function (deck_name: string, callback: (err?: NodeJS.ErrnoExcept ...@@ -120,22 +105,18 @@ const delDeck = function (deck_name: string, callback: (err?: NodeJS.ErrnoExcept
fs.unlink(config.deck_path + deck_name, callback); fs.unlink(config.deck_path + deck_name, callback);
}; };
const clearDecks = function (callback: (err?: Error | null) => void) { const clearDecks = async function (callback: (err?: Error | null) => void) {
asyncLib.auto( try {
{ const decks_list = await fs.promises.readdir(config.deck_path);
deckList: (done: (err: NodeJS.ErrnoException | null, files?: string[]) => void) => { for (const deck_name of decks_list) {
fs.readdir(config.deck_path, done); await new Promise<void>((resolve, reject) => {
}, delDeck(deck_name, (err) => (err ? reject(err) : resolve()));
removeAll: [ });
"deckList", }
(results: any, done: (err?: Error | null) => void) => { callback(null);
const decks_list = results.deckList as string[]; } catch (err) {
asyncLib.each(decks_list, delDeck as any, done); callback(err as Error);
}, }
],
},
callback
);
}; };
const UploadToChallonge = async function () { const UploadToChallonge = async function () {
...@@ -179,14 +160,13 @@ const UploadToChallonge = async function () { ...@@ -179,14 +160,13 @@ const UploadToChallonge = async function () {
return true; return true;
}; };
const receiveDecks = function ( const receiveDecks = async function (
files: any, files: any,
callback: (err: Error | null, result: Array<{ file: string; status: string }>) => void callback: (err: Error | null, result: Array<{ file: string; status: string }>) => void
) { ) {
const result: Array<{ file: string; status: string }> = []; try {
asyncLib.eachSeries( const result: Array<{ file: string; status: string }> = [];
files, for (const file of files) {
async (file: any) => {
if (file.name.endsWith(".ydk")) { if (file.name.endsWith(".ydk")) {
const deck = await readDeck(file.name, file.path); const deck = await readDeck(file.name, file.path);
if (deck.main.length >= 40) { if (deck.main.length >= 40) {
...@@ -207,11 +187,11 @@ const receiveDecks = function ( ...@@ -207,11 +187,11 @@ const receiveDecks = function (
status: "不是卡组文件", status: "不是卡组文件",
}); });
} }
},
(err: Error | null) => {
callback(err, result);
} }
); callback(null, result);
} catch (err) {
callback(err as Error, []);
}
}; };
//建立一个http服务器,接收API操作 //建立一个http服务器,接收API操作
......
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