mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
caching
This commit is contained in:
1 parent
ed31f40876
commit
30522bfda0
2 files changed
+75
No files matched your search
@@ -145,6 +145,12 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
|
console.log("Initializing server; this will take a while...");
|
||||||
|
|
||||||
|
console.log("Initializing virtual file system...");
|
||||||
|
await this.vfs.init();
|
||||||
|
|
||||||
|
console.log("Fetching game data...");
|
||||||
this.nationsDir = await this.vfs
|
this.nationsDir = await this.vfs
|
||||||
.dir("Data/XML/item_defs/vehicles")
|
.dir("Data/XML/item_defs/vehicles")
|
||||||
.then((files) => files.filter((nation) => nation !== "common"));
|
.then((files) => files.filter((nation) => nation !== "common"));
|
||||||
@@ -181,6 +187,8 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
{ delimiter: ";" },
|
{ delimiter: ";" },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.log("Fetching game localizations...");
|
||||||
|
let fetchedLocalizations = 0;
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
locales.supported.map(async ({ locale }) => {
|
locales.supported.map(async ({ locale }) => {
|
||||||
const blitzLocale = SUPPORTED_LOCALE_BLITZ_MAP[locale];
|
const blitzLocale = SUPPORTED_LOCALE_BLITZ_MAP[locale];
|
||||||
@@ -197,9 +205,15 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
...cache,
|
...cache,
|
||||||
...preInstalled,
|
...preInstalled,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`Fetched localizations for ${locale} (${++fetchedLocalizations}/${locales.supported.length})`,
|
||||||
|
);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.log("Fetching consumable and provision data...");
|
||||||
|
|
||||||
for (const match of (
|
for (const match of (
|
||||||
await this.vfs.text(
|
await this.vfs.text(
|
||||||
`Data/XML/item_defs/vehicles/common/consumables/list.xml`,
|
`Data/XML/item_defs/vehicles/common/consumables/list.xml`,
|
||||||
@@ -233,6 +247,10 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
).root,
|
).root,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("Initialization complete, enjoy :)");
|
||||||
|
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getString(name: string) {
|
private getString(name: string) {
|
||||||
@@ -274,6 +292,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async tankDefinitions() {
|
async tankDefinitions() {
|
||||||
const tankDefinitions = TankDefinitions.create();
|
const tankDefinitions = TankDefinitions.create();
|
||||||
|
|
||||||
@@ -948,6 +967,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return tankDefinitions;
|
return tankDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async camouflageDefinitions() {
|
async camouflageDefinitions() {
|
||||||
const camouflageDefinitions = CamouflageDefinitions.create();
|
const camouflageDefinitions = CamouflageDefinitions.create();
|
||||||
|
|
||||||
@@ -996,6 +1016,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async modelDefinitions() {
|
async modelDefinitions() {
|
||||||
const modelDefinitions = ModelDefinitions.create();
|
const modelDefinitions = ModelDefinitions.create();
|
||||||
|
|
||||||
@@ -1284,6 +1305,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return modelDefinitions;
|
return modelDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async mapDefinitions() {
|
async mapDefinitions() {
|
||||||
const mapDefinitions = MapDefinitions.create();
|
const mapDefinitions = MapDefinitions.create();
|
||||||
|
|
||||||
@@ -1299,6 +1321,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return mapDefinitions;
|
return mapDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async equipmentDefinitions() {
|
async equipmentDefinitions() {
|
||||||
const equipmentDefinitions = EquipmentDefinitions.create();
|
const equipmentDefinitions = EquipmentDefinitions.create();
|
||||||
|
|
||||||
@@ -1335,6 +1358,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return equipmentDefinitions;
|
return equipmentDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async consumableDefinitions() {
|
async consumableDefinitions() {
|
||||||
const consumableDefinitions = ConsumableDefinitions.create();
|
const consumableDefinitions = ConsumableDefinitions.create();
|
||||||
|
|
||||||
@@ -1439,6 +1463,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return consumableDefinitions;
|
return consumableDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async provisionDefinitions() {
|
async provisionDefinitions() {
|
||||||
const provisionDefinitions = ProvisionDefinitions.create();
|
const provisionDefinitions = ProvisionDefinitions.create();
|
||||||
|
|
||||||
@@ -1546,6 +1571,7 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return provisionDefinitions;
|
return provisionDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cache()
|
||||||
async skillDefinitions() {
|
async skillDefinitions() {
|
||||||
const skillDefinitions = SkillDefinitions.create();
|
const skillDefinitions = SkillDefinitions.create();
|
||||||
|
|
||||||
@@ -1563,3 +1589,47 @@ export class ServerBlitzKitAPI extends BlitzKitAPI {
|
|||||||
return skillDefinitions;
|
return skillDefinitions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function Cache(disableInDev = false) {
|
||||||
|
const cache = new WeakMap<object, Map<string, Promise<unknown>>>();
|
||||||
|
|
||||||
|
return function <This, Arguments extends any[], Return>(
|
||||||
|
target: (this: This, ...args: Arguments) => Promise<Return>,
|
||||||
|
// TODO: evaluate if we need context to make the error trace easier
|
||||||
|
// context: ClassMethodDecoratorContext<
|
||||||
|
// This,
|
||||||
|
// (this: This, ...args: Arguments) => Promise<Return>
|
||||||
|
// >,
|
||||||
|
) {
|
||||||
|
return async function replacementMethod(this: This, ...args: Arguments) {
|
||||||
|
const key = args.join("-");
|
||||||
|
let thisCache: Map<string, Promise<Return>>;
|
||||||
|
|
||||||
|
if (cache.has(this as object)) {
|
||||||
|
thisCache = cache.get(this as object) as Map<string, Promise<Return>>;
|
||||||
|
} else {
|
||||||
|
thisCache = new Map();
|
||||||
|
cache.set(this as object, thisCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
const disabled = disableInDev && import.meta.env.DEV;
|
||||||
|
|
||||||
|
if (thisCache.has(key) && !disabled) {
|
||||||
|
return thisCache.get(key)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
const promise = (async () => {
|
||||||
|
try {
|
||||||
|
return await target.apply(this, args);
|
||||||
|
} catch (error) {
|
||||||
|
thisCache!.delete(key);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
thisCache.set(key, promise);
|
||||||
|
|
||||||
|
return promise;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
ClientBlitzKitAPI,
|
ClientBlitzKitAPI,
|
||||||
|
LocalVFS,
|
||||||
ServerBlitzKitAPI,
|
ServerBlitzKitAPI,
|
||||||
type BlitzKitAPI,
|
type BlitzKitAPI,
|
||||||
} from "@blitzkit/core";
|
} from "@blitzkit/core";
|
||||||
@@ -7,6 +8,10 @@ import {
|
|||||||
let _api: BlitzKitAPI;
|
let _api: BlitzKitAPI;
|
||||||
|
|
||||||
if (import.meta.env.SSR) {
|
if (import.meta.env.SSR) {
|
||||||
|
const vfs = new LocalVFS(
|
||||||
|
"/run/media/tresabhi/Windows/Program Files/WindowsApps/7458BE2C.WorldofTanksBlitz_11.19.272.0_x64__x4tje2y229k00",
|
||||||
|
);
|
||||||
|
|
||||||
_api = await new ServerBlitzKitAPI(vfs).init();
|
_api = await new ServerBlitzKitAPI(vfs).init();
|
||||||
} else {
|
} else {
|
||||||
_api = new ClientBlitzKitAPI();
|
_api = new ClientBlitzKitAPI();
|
||||||
|
|||||||
Reference in new issue
Block a user