fix: resharder

This commit is contained in:
MARCROCK22 2024-12-13 09:27:29 -04:00
parent 1e0d1f3f6b
commit 5fe109527d
3 changed files with 9 additions and 24 deletions

View File

@ -236,9 +236,8 @@ export class WorkerClient<Ready extends boolean = boolean> extends BaseClient {
...this.options.gateway?.properties,
},
handlePayload(_, payload) {
if (payload.t === 'READY') {
shardsConnected++;
} else if (payload.t === 'GUILDS_READY' && shardsConnected === workerData.shards.length) {
if (payload.t !== 'GUILDS_READY') return;
if (++shardsConnected === workerData.shards.length) {
self.postMessage({
type: 'WORKER_READY_RESHARDING',
workerId: workerData.workerId,

View File

@ -147,36 +147,22 @@ export class ShardManager extends Map<number, Shard> {
//waiting for all shards to connect
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);
// dont listen more events when all shards are ready
};
const cleanProcess = (sharder: ShardManager) => {
handlePayload = async () => {
handlePayload = () => {
//
};
this.disconnectAll();
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) {
shard.options.handlePayload = (shardId, packet) => {
return this.options.handlePayload(shardId, packet);

View File

@ -282,7 +282,7 @@ export class WorkerManager extends Map<
this.get(message.workerId)!.disconnected = true;
if ([...this.values()].every(w => w.disconnected)) {
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;
delete this._info;
for (const [id] of this.entries()) {
@ -628,7 +628,7 @@ export class WorkerManager extends Map<
},
this.debugger,
);
await this.prepareWorkers(spaces, true);
this.prepareWorkers(spaces, true);
return this.reshardingWorkerQueue.shift()!();
}, this.options.resharding.interval);
}