import { System, SystemNames } from "."; import { Game } from "../Game"; import { ComponentNames, NetworkUpdateable } from "../components"; import { type MessageQueueProvider, type MessagePublisher, type MessageProcessor, } from "../network"; export class NetworkUpdate extends System { private queueProvider: MessageQueueProvider; private publisher: MessagePublisher; private messageProcessor: MessageProcessor; constructor( queueProvider: MessageQueueProvider, publisher: MessagePublisher, messageProcessor: MessageProcessor, ) { super(SystemNames.NetworkUpdate); this.queueProvider = queueProvider; this.publisher = publisher; this.messageProcessor = messageProcessor; } public update(_dt: number, game: Game) { this.queueProvider .getNewMessages() .forEach((message) => this.messageProcessor.process(message)); this.queueProvider.clearMessages(); game.forEachEntityWithComponent( ComponentNames.NetworkUpdateable, (entity) => { const networkUpdateComponent = entity.getComponent( ComponentNames.NetworkUpdateable, ); }, ); this.publisher.publish(); } }