Source: lib/msf/msf_sender.js

/*! @license
 * Shaka Player
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

goog.provide('shaka.msf.Sender');

goog.require('shaka.log');
goog.require('shaka.msf.BufferControlWriter');

goog.requireType('shaka.msf.Utils');
goog.requireType('shaka.msf.Writer');

shaka.msf.Sender = class {
  /**
   * @param {!shaka.msf.Writer} writer
   */
  constructor(writer) {
    /** @private {!shaka.msf.Writer} */
    this.writer_ = writer;
  }

  /**
   * @param {shaka.msf.Utils.ClientSetup} client
   * @return {!Promise}
   */
  async client(client) {
    shaka.log.debug('Encoding client setup message:', client);

    // Create a BufferControlWriter instance
    const writer = new shaka.msf.BufferControlWriter();

    // Marshal the client setup message
    writer.marshalClientSetup({
      versions: client.versions,
      params: client.params,
    });

    // Get the bytes from the writer
    const bytes = writer.getBytes();
    shaka.log.debug(`Client setup message created: ${bytes.length} bytes`);

    // Write the entire message in a single operation
    await this.writer_.write(bytes);

    shaka.log.debug('Client setup message sent successfully');
  }
};