mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-03 05:26:07 +00:00
fix: resharder
This commit is contained in:
parent
1e0d1f3f6b
commit
5fe109527d
@ -236,9 +236,8 @@ export class WorkerClient<Ready extends boolean = boolean> extends BaseClient {
|
|||||||
...this.options.gateway?.properties,
|
...this.options.gateway?.properties,
|
||||||
},
|
},
|
||||||
handlePayload(_, payload) {
|
handlePayload(_, payload) {
|
||||||
if (payload.t === 'READY') {
|
if (payload.t !== 'GUILDS_READY') return;
|
||||||
shardsConnected++;
|
if (++shardsConnected === workerData.shards.length) {
|
||||||
} else if (payload.t === 'GUILDS_READY' && shardsConnected === workerData.shards.length) {
|
|
||||||
self.postMessage({
|
self.postMessage({
|
||||||
type: 'WORKER_READY_RESHARDING',
|
type: 'WORKER_READY_RESHARDING',
|
||||||
workerId: workerData.workerId,
|
workerId: workerData.workerId,
|
||||||
|
@ -147,36 +147,22 @@ export class ShardManager extends Map<number, Shard> {
|
|||||||
|
|
||||||
//waiting for all shards to connect
|
//waiting for all shards to connect
|
||||||
let shardsConnected = 0;
|
let shardsConnected = 0;
|
||||||
const handleGuilds = new Set<string>();
|
|
||||||
|
|
||||||
let handlePayload = async (sharder: ShardManager, _: number, packet: GatewayDispatchPayload) => {
|
|
||||||
if (packet.t === 'GUILD_CREATE' || packet.t === 'GUILD_DELETE') {
|
|
||||||
handleGuilds.delete(packet.d.id);
|
|
||||||
if (shardsConnected === info.shards && !handleGuilds.size) {
|
|
||||||
return cleanProcess(sharder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (packet.t !== 'READY') return;
|
|
||||||
|
|
||||||
for (const guild of packet.d.guilds) {
|
|
||||||
handleGuilds.add(guild.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (++shardsConnected < info.shards || handleGuilds.size) return;
|
|
||||||
|
|
||||||
|
let handlePayload = (sharder: ShardManager, _: number, packet: GatewayDispatchPayload) => {
|
||||||
|
if (packet.t !== 'GUILDS_READY') return;
|
||||||
|
if (++shardsConnected !== info.shards) return;
|
||||||
cleanProcess(sharder);
|
cleanProcess(sharder);
|
||||||
// dont listen more events when all shards are ready
|
// dont listen more events when all shards are ready
|
||||||
};
|
};
|
||||||
|
|
||||||
const cleanProcess = (sharder: ShardManager) => {
|
const cleanProcess = (sharder: ShardManager) => {
|
||||||
handlePayload = async () => {
|
handlePayload = () => {
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
this.disconnectAll();
|
this.disconnectAll();
|
||||||
this.clear();
|
this.clear();
|
||||||
|
|
||||||
this.options.totalShards = this.options.shardEnd = info.shards;
|
this.options.totalShards = this.options.shardEnd = this.options.info.shards = info.shards;
|
||||||
for (const [id, shard] of sharder) {
|
for (const [id, shard] of sharder) {
|
||||||
shard.options.handlePayload = (shardId, packet) => {
|
shard.options.handlePayload = (shardId, packet) => {
|
||||||
return this.options.handlePayload(shardId, packet);
|
return this.options.handlePayload(shardId, packet);
|
||||||
|
@ -282,7 +282,7 @@ export class WorkerManager extends Map<
|
|||||||
this.get(message.workerId)!.disconnected = true;
|
this.get(message.workerId)!.disconnected = true;
|
||||||
if ([...this.values()].every(w => w.disconnected)) {
|
if ([...this.values()].every(w => w.disconnected)) {
|
||||||
this.options.totalShards = this._info!.shards;
|
this.options.totalShards = this._info!.shards;
|
||||||
this.options.shardEnd = this.options.totalShards = this._info!.shards;
|
this.options.shardEnd = this.options.totalShards = this.options.info.shards = this._info!.shards;
|
||||||
this.options.workers = this.size;
|
this.options.workers = this.size;
|
||||||
delete this._info;
|
delete this._info;
|
||||||
for (const [id] of this.entries()) {
|
for (const [id] of this.entries()) {
|
||||||
@ -628,7 +628,7 @@ export class WorkerManager extends Map<
|
|||||||
},
|
},
|
||||||
this.debugger,
|
this.debugger,
|
||||||
);
|
);
|
||||||
await this.prepareWorkers(spaces, true);
|
this.prepareWorkers(spaces, true);
|
||||||
return this.reshardingWorkerQueue.shift()!();
|
return this.reshardingWorkerQueue.shift()!();
|
||||||
}, this.options.resharding.interval);
|
}, this.options.resharding.interval);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user