summaryrefslogtreecommitdiff
path: root/server/src/network/MessageProcessor.ts
blob: c133f67b7ae964946d4722b0696cfee90b4f2c4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import {
  EntityUpdateBody,
  MessageProcessor,
  MessageType
} from '@engine/network';
import { ServerMessage, SessionManager } from '.';
import { Game } from '@engine/Game';

export class ServerMessageProcessor implements MessageProcessor {
  private game: Game;
  private sessionManager: SessionManager;

  constructor(game: Game, sessionManager: SessionManager) {
    this.game = game;
    this.sessionManager = sessionManager;
  }

  public process(message: ServerMessage) {
    switch (message.type) {
      case MessageType.NEW_INPUT: {
        const { sessionId } = message.sessionData;
        const session = this.sessionManager.getSession(sessionId);
        session?.inputSystem.keyPressed(message.body as string);
        break;
      }
      case MessageType.REMOVE_INPUT: {
        const { sessionId } = message.sessionData;
        const session = this.sessionManager.getSession(sessionId);
        session?.inputSystem.keyReleased(message.body as string);
        break;
      }
      case MessageType.UPDATE_ENTITIES: {
        const entityUpdates = message.body as unknown as EntityUpdateBody[];
        entityUpdates.forEach(({ id, args }) =>
          this.game.getEntity(id)?.setFrom(args)
        );
        break;
      }
      default: {
        break;
      }
    }
  }
}