mirror of
https://github.com/tiramisulabs/seyfert.git
synced 2025-07-01 20:46:08 +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,
|
||||
},
|
||||
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,
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user