vimp-engine 0.38.3 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +2 -2
  2. package/bin/vimp-sim.js +2 -2
  3. package/core/Cargo.toml +2 -2
  4. package/package.json +3 -4
  5. package/src/client/InputListener.js +3 -0
  6. package/src/client/SoundManager.js +13 -0
  7. package/src/client/boot.js +11 -87
  8. package/src/client/components/controller/Controls.js +10 -0
  9. package/src/client/components/controller/Voice.js +31 -0
  10. package/src/client/components/model/Controls.js +64 -0
  11. package/src/client/components/model/RoomMenu.js +1 -1
  12. package/src/client/components/model/Voice.js +96 -0
  13. package/src/client/components/model/Vote.js +2 -1
  14. package/src/client/components/view/Auth.js +3 -3
  15. package/src/client/components/view/Voice.js +172 -0
  16. package/src/client/lib/formBuilder.js +7 -6
  17. package/src/client/lib/hostVoteCommand.js +2 -2
  18. package/src/client/lib/pickActiveGame.js +3 -12
  19. package/src/client/lib/retryOnNetworkError.js +0 -9
  20. package/src/client/lib/voiceState.js +78 -0
  21. package/src/client/main.js +160 -90
  22. package/src/client/network/HostConnectionManager.js +46 -5
  23. package/src/client/network/HostController.js +43 -0
  24. package/src/client/network/LoopbackTransport.js +14 -0
  25. package/src/client/network/SessionSupervisor.js +38 -14
  26. package/src/client/network/WebRtcManager.js +46 -5
  27. package/src/client/network/policyClose.js +10 -77
  28. package/src/client/style.css +150 -9
  29. package/src/client/views/gameShell.js +2 -4
  30. package/src/client/views/includes/auth.pug +1 -4
  31. package/src/client/views/includes/lobby.pug +3 -6
  32. package/src/client/voice/JitterBuffer.js +137 -0
  33. package/src/client/voice/MicCapture.js +307 -0
  34. package/src/client/voice/PttMachine.js +369 -0
  35. package/src/client/voice/VoiceClient.js +336 -0
  36. package/src/client/voice/VoiceCues.js +295 -0
  37. package/src/client/voice/VoiceEncoder.js +174 -0
  38. package/src/client/voice/VoicePlayback.js +558 -0
  39. package/src/client/voice/audioData.js +35 -0
  40. package/src/client/voice/captureProcessor.worklet.js +136 -0
  41. package/src/client/voice/opusConfig.js +49 -0
  42. package/src/client/voice/voiceOutput.js +72 -0
  43. package/src/client/voice/voiceSupport.js +71 -0
  44. package/src/client/voice/voiceTones.js +90 -0
  45. package/src/config/clientServices.js +2 -0
  46. package/src/config/closeCodes.js +7 -9
  47. package/src/config/gameCodes.js +1 -1
  48. package/src/config/hostDefaults.js +2 -2
  49. package/src/config/lobby.js +3 -4
  50. package/src/config/voiceDefaults.js +44 -0
  51. package/src/config/voiceProtocol.js +80 -0
  52. package/src/config/voteKeys.js +4 -0
  53. package/src/config/wsports.js +13 -1
  54. package/src/devtools/ScenarioRunner.js +1 -1
  55. package/src/devtools/builtinScenario.js +2 -2
  56. package/src/devtools/contract/rules/a2-package-scripts.js +1 -1
  57. package/src/devtools/contract/rules/a4-vite-config.js +1 -1
  58. package/src/devtools/contract/rules/b11-voice-config.js +34 -0
  59. package/src/devtools/contract/rules/c12-voice-hotkey.js +70 -0
  60. package/src/devtools/contract/rules/c4-component-dependencies.js +1 -1
  61. package/src/devtools/contract/rules/index.js +4 -0
  62. package/src/devtools/invariants.js +1 -1
  63. package/src/devtools/pluginLoader.js +2 -2
  64. package/src/host/HostGame.js +62 -4
  65. package/src/host/PortMachine.js +23 -24
  66. package/src/host/commandFailure.js +2 -2
  67. package/src/host/host.worker.js +7 -0
  68. package/src/host/identity.js +3 -3
  69. package/src/host/meta/SocketManager.js +6 -0
  70. package/src/host/meta/core/CommandProcessor.js +2 -2
  71. package/src/host/meta/modules/Accolades.js +1 -1
  72. package/src/host/meta/modules/voice/Voice.js +430 -0
  73. package/src/host/meta/modules/voice/channels.js +58 -0
  74. package/src/host/meta/modules/voice/index.js +1 -0
  75. package/src/lib/VoiceRelay.js +200 -0
  76. package/src/lib/buildClientConfig.js +7 -0
  77. package/src/lib/capabilities.js +4 -0
  78. package/src/lib/createHostRuntime.js +8 -0
  79. package/src/lib/gameConfigView.js +11 -1
  80. package/src/lib/loadGamePackage.js +7 -9
  81. package/src/lib/offlinePlayerData.js +1 -1
  82. package/src/lib/validators.js +2 -2
  83. package/src/lib/voiceConfig.js +136 -0
  84. package/src/lib/voiceMessages.js +172 -0
  85. package/src/lib/voicePacket.js +142 -0
  86. package/src/standalone/index.js +3 -2
  87. package/src/client/lib/footerLink.js +0 -30
  88. package/src/client/network/WebSocketTransport.js +0 -78
@@ -1,78 +0,0 @@
1
- import Publisher from '../../lib/Publisher.js';
2
-
3
- // Третий транспорт клиента (Этап 2 плана standalone-sdk): прямой WebSocket к
4
- // dedicated-серверу. Интерфейсный близнец WebRtcManager и LoopbackTransport —
5
- // publisher с 'message'/'close', connect/send/close, — поэтому клиентский код
6
- // про него не знает.
7
- //
8
- // Отличия от WebRTC, которые надо держать в голове:
9
- // разделения meta/state тут нет, флаг reliable игнорируется. Значит PING/PONG
10
- // идут надёжным каналом (замер RTT становится замером TCP-пути), а бэкпрешер
11
- // вместо дропа позиционных кадров живёт на серверной стороне.
12
-
13
- // WebSocket.OPEN: константа класса, а не инстанса — у фейкового сокета в
14
- // тестах её может не быть вовсе
15
- const WS_OPEN = 1;
16
-
17
- export default class WebSocketTransport {
18
- /**
19
- * @param {string} url - Адрес игрового WebSocket.
20
- * @param {Object} [options]
21
- * @param {Function} [options.socketFactory] - Фабрика сокета (тесты).
22
- */
23
- constructor(url, { socketFactory = u => new WebSocket(u) } = {}) {
24
- this._url = url;
25
- this._socketFactory = socketFactory;
26
- this._ws = null;
27
- this._closed = false;
28
-
29
- this.publisher = new Publisher();
30
- }
31
-
32
- connect() {
33
- this._ws = this._socketFactory(this._url);
34
-
35
- // обязательно: клиент различает кадр снапшота и JSON-порт по
36
- // `data instanceof ArrayBuffer`, а дефолтный браузерный WS отдаёт Blob
37
- this._ws.binaryType = 'arraybuffer';
38
-
39
- this._ws.onopen = () => this.publisher.emit('open');
40
- this._ws.onmessage = event => this.publisher.emit('message', event.data);
41
- // код закрытия уезжает подписчику: политические отказы сервера (лимит
42
- // подключений, таймаут хендшейка) клиент лечить перезагрузкой не должен —
43
- // см. handleDisconnect в main.js
44
- this._ws.onclose = event => this._emitClose(event?.code);
45
- // ошибка сокета всегда сопровождается close — отдельного события наружу
46
- // не даём, иначе клиент погасил бы матч дважды
47
- this._ws.onerror = () => {};
48
- }
49
-
50
- /**
51
- * @param {string|ArrayBuffer} data - Кадр.
52
- * @param {boolean} [reliable] - Игнорируется: у WebSocket нет уровней
53
- * надёжности, всё едет надёжно и по порядку.
54
- */
55
- send(data) {
56
- if (this._ws && this._ws.readyState === WS_OPEN) {
57
- this._ws.send(data);
58
- }
59
- }
60
-
61
- close() {
62
- if (this._closed) {
63
- return;
64
- }
65
-
66
- this._ws?.close();
67
- this._emitClose();
68
- }
69
-
70
- _emitClose(code) {
71
- if (this._closed) {
72
- return;
73
- }
74
-
75
- this._closed = true;
76
- this.publisher.emit('close', code);
77
- }
78
- }