UNPKG

@arcware-cloud/pixelstreaming-websdk

Version:

WebSDK for easy implementation of pixel streaming with Arcware Cloud Services. Heavily based on the '@epicgames-ps' library.

1,115 lines (1,094 loc) 3.23 MB
/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 7099: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "EventEmitter": () => (/* binding */ EventEmitter) /* harmony export */ }); // Copyright Epic Games, Inc. All Rights Reserved. // To match NodeJS' EventEmitter syntax without downstream code changes we need to use `any`. // This means we need to disable linting `any` checks on this file. // /* eslint-disable @typescript-eslint/no-unsafe-argument */ class PixelStreamingEventListener { constructor(callback) { this._args = []; this._callback = callback; } handleEvent(_evt) { this._callback(...this._args); // Reset storage of args. this._args = []; } setArgs(...args) { this._args = args; } } /** * A feature-limited, but _mostly_ drop-in replacement for Node's EventEmitter type that is implemented using EventTarget. * * For those unfamiliar with Node's EventEmitter, here is some info from the official docs: * * [In NodeJS] all objects that emit events are instances of the `EventEmitter` class. These * objects expose an `eventEmitter.on()` function that allows one or more * functions to be attached to named events emitted by the object. Typically, * event names are camel-cased strings but any valid JavaScript property key * can be used. * * When the `EventEmitter` object emits an event, all of the functions attached * to that specific event are called _synchronously_. Any values returned by the * called listeners are _ignored_ and discarded. * * The following example shows a simple `EventEmitter` instance with a single * listener. The `eventEmitter.on()` method is used to register listeners, while * the `eventEmitter.emit()` method is used to trigger the event. * * ```js * import { EventEmitter } from 'node:events'; * * class MyEmitter extends EventEmitter {} * * const myEmitter = new MyEmitter(); * myEmitter.on('event', () => { * console.log('an event occurred!'); * }); * myEmitter.emit('event'); * ``` */ class EventEmitter extends EventTarget { constructor() { super(); this._eventListeners = new Map(); } removeListenerInternal(eventName, listener) { if (this._eventListeners.has(eventName)) { const listeners = this._eventListeners.get(eventName); if (listeners === undefined) { return this; } for (let i = 0; i < listeners.length; ++i) { const eventPair = listeners[i]; if (eventPair.callback === listener) { // Remove from event target super.removeEventListener(eventName, eventPair.eventListenerWrapper); // Remove from our internal map listeners.splice(i, 1); break; } } } return this; } /** * Alias for `emitter.on(eventName, listener)`. */ addListener(eventName, listener) { return this.on(eventName, listener); } /** * Adds the `listener` function to the end of the listeners array for the event * named `eventName`. * * ```js * server.on('connection', (stream) => { * console.log('someone connected!'); * }); * ``` * * Returns a reference to the `EventEmitter`, so that calls can be chained. * * @param eventName - The name of the event. * @param listener - The callback function */ on(eventName, listener) { var _a; // Wrap our normal JS function in a event listener interface // so we can use it with event target. const eventListenerWrapper = new PixelStreamingEventListener(listener); super.addEventListener(eventName, eventListenerWrapper); // Store the event listener/function pair for later removal. if (!this._eventListeners.has(eventName)) { this._eventListeners.set(eventName, new Array()); } (_a = this._eventListeners .get(eventName)) === null || _a === void 0 ? void 0 : _a.push({ callback: listener, eventListenerWrapper: eventListenerWrapper }); return this; } /** * Adds a **one-time** `listener` function for the event named `eventName`. The * next time `eventName` is triggered, this listener is removed and then invoked. * * ```js * server.once('connection', (stream) => { * console.log('Ah, we have our first user!'); * }); * ``` * * Returns a reference to the `EventEmitter`, so that calls can be chained. * @param eventName - The name of the event. * @param listener - The callback function */ once(eventName, listener) { var _a; // Pass options so this event callback is only called once const eventListenerOpts = { once: true }; // Wrap our normal JS function in a event listener interface // so we can use it with event target and remove it from event target when this function completes. const eventListenerWrapper = new PixelStreamingEventListener((...args) => { listener(args); this.removeListenerInternal(eventName, listener); }); super.addEventListener(eventName, eventListenerWrapper, eventListenerOpts); // Store the event listener/function pair for later removal. if (!this._eventListeners.has(eventName)) { this._eventListeners.set(eventName, new Array()); } (_a = this._eventListeners .get(eventName)) === null || _a === void 0 ? void 0 : _a.push({ callback: listener, eventListenerWrapper: eventListenerWrapper }); return this; } /** * Removes the specified `listener` from this EventEmitter. * * ```js * const callback = (stream) => { * console.log('someone connected!'); * }; * server.on('connection', callback); * // ... * server.removeListener('connection', callback); * ``` * Returns a reference to the `EventEmitter`, so that calls can be chained. */ removeListener(eventName, listener) { this.removeListenerInternal(eventName, listener); return this; } /** * Alias for `emitter.removeListener()`. */ off(eventName, listener) { return this.removeListener(eventName, listener); } /** * Removes all listeners, or those of the specified `eventName`. * Returns a reference to the `EventEmitter`, so that calls can be chained. */ removeAllListeners(eventName) { if (this._eventListeners.has(eventName)) { const listeners = this._eventListeners.get(eventName); if (listeners === undefined) { return this; } // Remove each event listener from the event target for (const listenerPair of listeners) { this.removeEventListener(eventName, listenerPair.eventListenerWrapper); } // Remove all event listeners mapped to this event from our internal map this._eventListeners.delete(eventName); } return this; } /** * Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments * to each. * * Returns `true` if the event had listeners, `false` otherwise. * * ```js * import { EventEmitter } from 'node:events'; * const myEmitter = new EventEmitter(); * * // First listener * myEmitter.on('event', function firstListener() { * console.log('Helloooo! first listener'); * }); * // Second listener * myEmitter.on('event', function secondListener(arg1, arg2) { * console.log(`event with parameters ${arg1}, ${arg2} in second listener`); * }); * // Third listener * myEmitter.on('event', function thirdListener(...args) { * const parameters = args.join(', '); * console.log(`event with parameters ${parameters} in third listener`); * }); * * console.log(myEmitter.listeners('event')); * * myEmitter.emit('event', 1, 2, 3, 4, 5); * * // Prints: * // [ * // [Function: firstListener], * // [Function: secondListener], * // [Function: thirdListener] * // ] * // Helloooo! first listener * // event with parameters 1, 2 in second listener * // event with parameters 1, 2, 3, 4, 5 in third listener * ``` */ emit(eventName, ...args) { if (this._eventListeners.has(eventName)) { const listeners = this._eventListeners.get(eventName); if (listeners === undefined) { return false; } // Ensure each of our listeners have the args the callback injected for (const listenerPair of listeners) { listenerPair.eventListenerWrapper.setArgs(...args); } // Fire off the actual event super.dispatchEvent(new Event(eventName)); return true; } return false; } } //# sourceMappingURL=EventEmitter.js.map /***/ }), /***/ 7800: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "LogLevel": () => (/* binding */ LogLevel), /* harmony export */ "Logger": () => (/* binding */ Logger), /* harmony export */ "LoggerContext": () => (/* binding */ LoggerContext), /* harmony export */ "LoggerType": () => (/* binding */ LoggerType), /* harmony export */ "overrideLogger": () => (/* binding */ overrideLogger) /* harmony export */ }); // Copyright Epic Games, Inc. All Rights Reserved. var LogLevel; (function (LogLevel) { LogLevel[LogLevel["Disabled"] = 0] = "Disabled"; LogLevel[LogLevel["Error"] = 1] = "Error"; LogLevel[LogLevel["Warning"] = 2] = "Warning"; LogLevel[LogLevel["Info"] = 3] = "Info"; LogLevel[LogLevel["Debug"] = 4] = "Debug"; })(LogLevel || (LogLevel = {})); /** * The global context for the logger configuration. * This cannot be stored statically in the Logger class because we sometimes have multiple execution * contexts, such as stats reporting. Instead we store the logger config context on the window object * to be shared with any Logger instances. */ class LoggerContext { constructor() { this.logLevel = LogLevel.Debug; this.includeStack = true; } } function overrideLogger(logger) { Logger = logger; } /** * A basic console logger utilized by the Pixel Streaming frontend to allow * logging to the browser console. */ class LoggerType { /** * Set the log verbosity level */ InitLogging(logLevel, includeStack) { this.ValidateContext(); this.context.logLevel = logLevel; this.context.includeStack = includeStack; } /** * Logging output for debugging * @param message - the message to be logged */ Debug(message) { this.ValidateContext(); if (this.context.logLevel >= LogLevel.Debug) { this.CommonLog('Debug', message); } } /** * Basic logging output for standard messages * @param message - the message to be logged */ Info(message) { this.ValidateContext(); if (this.context.logLevel >= LogLevel.Info) { this.CommonLog('Info', message); } } /** * Logging for warnings * @param message - the message to be logged */ Warning(message) { this.ValidateContext(); if (this.context.logLevel >= LogLevel.Warning) { this.CommonLog('Warning', message); } } /** * Error logging * @param message - the message to be logged */ Error(message) { this.ValidateContext(); if (this.context.logLevel >= LogLevel.Error) { this.CommonLog('Error', message); } } /** * The common log function that all other log functions call to. * @param level - the level of this log message. * @param stack - an optional stack trace string from where the log message was called. * @param message - the message to be logged. */ CommonLog(level, message) { let logMessage = `[${level}] - ${message}`; if (this.context.includeStack) { logMessage += `\nStack: ${this.GetStackTrace()}`; } if (level === 'Error') { console.error(logMessage); } else if (level === 'Warning') { console.warn(logMessage); } else { console.log(logMessage); } } /** * Captures the stack and returns it * @returns the current stack */ GetStackTrace() { const error = new Error(); let formattedStack = 'No Stack Available for this browser'; // format the error if (error.stack) { formattedStack = error.stack.toString().replace(/Error/g, ''); } return formattedStack; } /** * Since there can be multiple execution contexts, (stats reporting and some webxr logging comes from * different execution contexts we can end up with multiple static Logger instances. Here we try to * work around it by storing the context on the window object. */ ValidateContext() { if (!this.context) { if (typeof window == 'undefined' || !window) { // no window object so we can only store a local context. this.context = new LoggerContext(); } else if (!window.loggerContext) { this.context = new LoggerContext(); window.loggerContext = this.context; } else { this.context = window.loggerContext; } } } } let Logger = new LoggerType(); //# sourceMappingURL=Logger.js.map /***/ }), /***/ 3665: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "createMessage": () => (/* binding */ createMessage), /* harmony export */ "validateMessage": () => (/* binding */ validateMessage) /* harmony export */ }); /* harmony import */ var _Logger_Logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7800); /* harmony import */ var _message_registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2366); /** * A helper for creating signalling messages. Takes in optional given parameters and * includes them in a message object with the 'type' field set properly for the message * type supplied. * @param messageType - A message type from MessageRegistry that indicates the type of message to create. * @param params - An optional object whose fields are added to the newly created message. * @returns The resulting message object. */ function createMessage(messageType, params) { const message = messageType.create(); message.type = messageType.typeName; if (params) { messageType.mergePartial(message, params); } return message; } /** * Tests that the supplied message is valid. That is contains all expected fields and * doesn't contain any unknown fields. * @param msg - The message object to test. * @returns The message type from MessageRegistry of the supplied message object if it's valid, or null if invalid. */ function validateMessage(msg) { let valid = true; if (!msg.type) { _Logger_Logger__WEBPACK_IMPORTED_MODULE_0__.Logger.Error(`Parsed message has no type. Rejected. ${JSON.stringify(msg)}`); return null; } const messageType = _message_registry__WEBPACK_IMPORTED_MODULE_1__.MessageRegistry[msg.type]; if (!messageType) { _Logger_Logger__WEBPACK_IMPORTED_MODULE_0__.Logger.Error(`Message is of an unknown type: "${msg.type}". Rejected.`); return null; } if (messageType.fields) { for (const field of messageType.fields) { if (!field.opt) { if (!Object.prototype.hasOwnProperty.call(msg, field.name)) { _Logger_Logger__WEBPACK_IMPORTED_MODULE_0__.Logger.Error(`Message "${msg.type}"" is missing required field "${field.name}". Rejected.`); valid = false; } } } } for (const fieldName in msg) { const found = messageType.fields.find((field) => field.name === fieldName); if (!found) { _Logger_Logger__WEBPACK_IMPORTED_MODULE_0__.Logger.Error(`Message "${msg.type}" contains unknown field "${fieldName}". Rejected.`); valid = false; } } return valid ? messageType : null; } //# sourceMappingURL=message_helpers.js.map /***/ }), /***/ 2366: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "MessageRegistry": () => (/* binding */ MessageRegistry) /* harmony export */ }); /* harmony import */ var _signalling_messages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7610); /** * A map of all the supported signalling messages in the Pixel Streaming * signalling protocol. This allows mapping of signalling message names * to actual message types. */ const MessageRegistry = { answer: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.answer, config: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.config, disconnectPlayer: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.disconnectPlayer, endpointId: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.endpointId, endpointIdConfirm: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.endpointIdConfirm, iceCandidate: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.iceCandidate, identify: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.identify, listStreamers: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.listStreamers, offer: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.offer, ping: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.ping, playerConnected: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.playerConnected, playerCount: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.playerCount, playerDisconnected: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.playerDisconnected, pong: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.pong, stats: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.stats, streamerDisconnected: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.streamerDisconnected, streamerList: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.streamerList, subscribe: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.subscribe, unsubscribe: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.unsubscribe, layerPreference: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.layerPreference, dataChannelRequest: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.dataChannelRequest, peerDataChannels: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.peerDataChannels, peerDataChannelsReady: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.peerDataChannelsReady, streamerDataChannels: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.streamerDataChannels, startStreaming: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.startStreaming, stopStreaming: _signalling_messages__WEBPACK_IMPORTED_MODULE_0__.stopStreaming }; //# sourceMappingURL=message_registry.js.map /***/ }), /***/ 7610: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "answer": () => (/* binding */ answer), /* harmony export */ "base_message": () => (/* binding */ base_message), /* harmony export */ "config": () => (/* binding */ config), /* harmony export */ "dataChannelRequest": () => (/* binding */ dataChannelRequest), /* harmony export */ "disconnectPlayer": () => (/* binding */ disconnectPlayer), /* harmony export */ "endpointId": () => (/* binding */ endpointId), /* harmony export */ "endpointIdConfirm": () => (/* binding */ endpointIdConfirm), /* harmony export */ "iceCandidate": () => (/* binding */ iceCandidate), /* harmony export */ "iceCandidateData": () => (/* binding */ iceCandidateData), /* harmony export */ "identify": () => (/* binding */ identify), /* harmony export */ "layerPreference": () => (/* binding */ layerPreference), /* harmony export */ "listStreamers": () => (/* binding */ listStreamers), /* harmony export */ "offer": () => (/* binding */ offer), /* harmony export */ "peerConnectionOptions": () => (/* binding */ peerConnectionOptions), /* harmony export */ "peerDataChannels": () => (/* binding */ peerDataChannels), /* harmony export */ "peerDataChannelsReady": () => (/* binding */ peerDataChannelsReady), /* harmony export */ "ping": () => (/* binding */ ping), /* harmony export */ "playerConnected": () => (/* binding */ playerConnected), /* harmony export */ "playerCount": () => (/* binding */ playerCount), /* harmony export */ "playerDisconnected": () => (/* binding */ playerDisconnected), /* harmony export */ "pong": () => (/* binding */ pong), /* harmony export */ "startStreaming": () => (/* binding */ startStreaming), /* harmony export */ "stats": () => (/* binding */ stats), /* harmony export */ "stopStreaming": () => (/* binding */ stopStreaming), /* harmony export */ "streamerDataChannels": () => (/* binding */ streamerDataChannels), /* harmony export */ "streamerDisconnected": () => (/* binding */ streamerDisconnected), /* harmony export */ "streamerIdChanged": () => (/* binding */ streamerIdChanged), /* harmony export */ "streamerList": () => (/* binding */ streamerList), /* harmony export */ "subscribe": () => (/* binding */ subscribe), /* harmony export */ "subscribeFailed": () => (/* binding */ subscribeFailed), /* harmony export */ "unsubscribe": () => (/* binding */ unsubscribe) /* harmony export */ }); /* harmony import */ var _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(299); /* harmony import */ var _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4548); /* harmony import */ var _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(827); // @generated message type with reflection information, may provide speed optimized methods class base_message$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("base_message", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message base_message */ const base_message = new base_message$Type(); // @generated message type with reflection information, may provide speed optimized methods class peerConnectionOptions$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("peerConnectionOptions", []); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message peerConnectionOptions */ const peerConnectionOptions = new peerConnectionOptions$Type(); // @generated message type with reflection information, may provide speed optimized methods class config$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("config", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "peerConnectionOptions", kind: "message", T: () => peerConnectionOptions }, { no: 3, name: "protocolVersion", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; case /* peerConnectionOptions peerConnectionOptions */ 2: message.peerConnectionOptions = peerConnectionOptions.internalBinaryRead(reader, reader.uint32(), options, message.peerConnectionOptions); break; case /* optional string protocolVersion */ 3: message.protocolVersion = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); /* peerConnectionOptions peerConnectionOptions = 2; */ if (message.peerConnectionOptions) peerConnectionOptions.internalBinaryWrite(message.peerConnectionOptions, writer.tag(2, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).fork(), options).join(); /* optional string protocolVersion = 3; */ if (message.protocolVersion !== undefined) writer.tag(3, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.protocolVersion); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message config */ const config = new config$Type(); // @generated message type with reflection information, may provide speed optimized methods class identify$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("identify", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message identify */ const identify = new identify$Type(); // @generated message type with reflection information, may provide speed optimized methods class endpointId$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("endpointId", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 3, name: "protocolVersion", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; message.id = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; case /* string id */ 2: message.id = reader.string(); break; case /* optional string protocolVersion */ 3: message.protocolVersion = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); /* string id = 2; */ if (message.id !== "") writer.tag(2, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.id); /* optional string protocolVersion = 3; */ if (message.protocolVersion !== undefined) writer.tag(3, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.protocolVersion); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message endpointId */ const endpointId = new endpointId$Type(); // @generated message type with reflection information, may provide speed optimized methods class endpointIdConfirm$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("endpointIdConfirm", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "committedId", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; message.committedId = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; case /* string committedId */ 2: message.committedId = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); /* string committedId = 2; */ if (message.committedId !== "") writer.tag(2, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.committedId); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message endpointIdConfirm */ const endpointIdConfirm = new endpointIdConfirm$Type(); // @generated message type with reflection information, may provide speed optimized methods class streamerIdChanged$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("streamerIdChanged", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "newID", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; message.newID = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; case /* string newID */ 2: message.newID = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); /* string newID = 2; */ if (message.newID !== "") writer.tag(2, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.newID); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message streamerIdChanged */ const streamerIdChanged = new streamerIdChanged$Type(); // @generated message type with reflection information, may provide speed optimized methods class listStreamers$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("listStreamers", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message listStreamers */ const listStreamers = new listStreamers$Type(); // @generated message type with reflection information, may provide speed optimized methods class streamerList$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("streamerList", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "ids", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; message.ids = []; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; case /* repeated string ids */ 2: message.ids.push(reader.string()); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); /* repeated string ids = 2; */ for (let i = 0; i < message.ids.length; i++) writer.tag(2, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.ids[i]); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message streamerList */ const streamerList = new streamerList$Type(); // @generated message type with reflection information, may provide speed optimized methods class subscribe$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("subscribe", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "streamerId", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; message.streamerId = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; case /* string streamerId */ 2: message.streamerId = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return message; } internalBinaryWrite(message, writer, options) { /* string type = 1; */ if (message.type !== "") writer.tag(1, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.type); /* string streamerId = 2; */ if (message.streamerId !== "") writer.tag(2, _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.WireType.LengthDelimited).string(message.streamerId); let u = options.writeUnknownFields; if (u !== false) (u == true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); return writer; } } /** * @generated MessageType for protobuf message subscribe */ const subscribe = new subscribe$Type(); // @generated message type with reflection information, may provide speed optimized methods class unsubscribe$Type extends _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_0__.MessageType { constructor() { super("unsubscribe", [ { no: 1, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ } ]); } create(value) { const message = globalThis.Object.create((this.messagePrototype)); message.type = ""; if (value !== undefined) (0,_protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_1__.reflectionMergePartial)(this, message, value); return message; } internalBinaryRead(reader, length, options, target) { let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length; while (reader.pos < end) { let [fieldNo, wireType] = reader.tag(); switch (fieldNo) { case /* string type */ 1: message.type = reader.string(); break; default: let u = options.readUnknownField; if (u === "throw") throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); let d = reader.skip(wireType); if (u !== false) (u === true ? _protobuf_ts_runtime__WEBPACK_IMPORTED_MODULE_2__.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); } } return messag