Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  dataChannel.js   Sprache: JAVA

 
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


/**
 * Returns the contents of a blob as text
 *
 * @param {Blob} blob
          The blob to retrieve the contents from
 */

function getBlobContent(blob) {
  return new Promise(resolve => {
    var reader = new FileReader();
    // Listen for 'onloadend' which will always be called after a success or failure
    reader.onloadend = event => resolve(event.target.result);
    reader.readAsText(blob);
  });
}

var commandsCreateDataChannel = [
  function PC_REMOTE_EXPECT_DATA_CHANNEL(test) {
    test.pcRemote.expectDataChannel();
  },

  function PC_LOCAL_CREATE_DATA_CHANNEL(test) {
    var channel = test.pcLocal.createDataChannel({});
    is(channel.binaryType, "blob", channel + " is of binary type 'blob'");

    is(
      test.pcLocal.signalingState,
      STABLE,
      "Create datachannel does not change signaling state"
    );
    return test.pcLocal.observedNegotiationNeeded;
  },
];

var commandsWaitForDataChannel = [
  function PC_LOCAL_VERIFY_DATA_CHANNEL_STATE(test) {
    return test.pcLocal.dataChannels[0].opened;
  },

  function PC_REMOTE_VERIFY_DATA_CHANNEL_STATE(test) {
    return test.pcRemote.nextDataChannel.then(channel => channel.opened);
  },
];

var commandsCheckDataChannel = [
  function SEND_MESSAGE(test) {
    var message = "Lorem ipsum dolor sit amet";

    info("Sending message:" + message);
    return test.send(message).then(result => {
      is(
        result.data,
        message,
        "Message correctly transmitted from pcLocal to pcRemote."
      );
    });
  },

  function SEND_BLOB(test) {
    var contents = "At vero eos et accusam et justo duo dolores et ea rebum.";
    var blob = new Blob([contents], { type: "text/plain" });

    info("Sending blob");
    return test
      .send(blob)
      .then(result => {
        ok(result.data instanceof Blob, "Received data is of instance Blob");
        is(result.data.size, blob.size, "Received data has the correct size.");

        return getBlobContent(result.data);
      })
      .then(recv_contents =>
        is(recv_contents, contents, "Received data has the correct content.")
      );
  },

  function CREATE_SECOND_DATA_CHANNEL(test) {
    return test.createDataChannel({}).then(result => {
      is(
        result.remote.binaryType,
        "blob",
        "remote data channel is of binary type 'blob'"
      );
    });
  },

  function SEND_MESSAGE_THROUGH_LAST_OPENED_CHANNEL(test) {
    var channels = test.pcRemote.dataChannels;
    var message = "I am the Omega";

    info("Sending message:" + message);
    return test.send(message).then(result => {
      is(
        channels.indexOf(result.channel),
        channels.length - 1,
        "Last channel used"
      );
      is(result.data, message, "Received message has the correct content.");
    });
  },

  function SEND_MESSAGE_THROUGH_FIRST_CHANNEL(test) {
    var message = "Message through 1st channel";
    var options = {
      sourceChannel: test.pcLocal.dataChannels[0],
      targetChannel: test.pcRemote.dataChannels[0],
    };

    info("Sending message:" + message);
    return test.send(message, options).then(result => {
      is(
        test.pcRemote.dataChannels.indexOf(result.channel),
        0,
        "1st channel used"
      );
      is(result.data, message, "Received message has the correct content.");
    });
  },

  function SEND_MESSAGE_BACK_THROUGH_FIRST_CHANNEL(test) {
    var message = "Return a message also through 1st channel";
    var options = {
      sourceChannel: test.pcRemote.dataChannels[0],
      targetChannel: test.pcLocal.dataChannels[0],
    };

    info("Sending message:" + message);
    return test.send(message, options).then(result => {
      is(
        test.pcLocal.dataChannels.indexOf(result.channel),
        0,
        "1st channel used"
      );
      is(result.data, message, "Return message has the correct content.");
    });
  },

  function CREATE_NEGOTIATED_DATA_CHANNEL_MAX_RETRANSMITS(test) {
    var options = {
      negotiated: true,
      id: 5,
      protocol: "foo/bar",
      ordered: false,
      maxRetransmits: 500,
    };
    return test.createDataChannel(options).then(result => {
      is(
        result.local.binaryType,
        "blob",
        result.remote + " is of binary type 'blob'"
      );
      is(
        result.local.id,
        options.id,
        result.local + " id is:" + result.local.id
      );
      is(
        result.local.protocol,
        options.protocol,
        result.local + " protocol is:" + result.local.protocol
      );
      is(
        result.local.reliable,
        false,
        result.local + " reliable is:" + result.local.reliable
      );
      is(
        result.local.ordered,
        options.ordered,
        result.local + " ordered is:" + result.local.ordered
      );
      is(
        result.local.maxRetransmits,
        options.maxRetransmits,
        result.local + " maxRetransmits is:" + result.local.maxRetransmits
      );
      is(
        result.local.maxPacketLifeTime,
        null,
        result.local + " maxPacketLifeTime is:" + result.local.maxPacketLifeTime
      );

      is(
        result.remote.binaryType,
        "blob",
        result.remote + " is of binary type 'blob'"
      );
      is(
        result.remote.id,
        options.id,
        result.remote + " id is:" + result.remote.id
      );
      is(
        result.remote.protocol,
        options.protocol,
        result.remote + " protocol is:" + result.remote.protocol
      );
      is(
        result.remote.reliable,
        false,
        result.remote + " reliable is:" + result.remote.reliable
      );
      is(
        result.remote.ordered,
        options.ordered,
        result.remote + " ordered is:" + result.remote.ordered
      );
      is(
        result.remote.maxRetransmits,
        options.maxRetransmits,
        result.remote + " maxRetransmits is:" + result.remote.maxRetransmits
      );
      is(
        result.remote.maxPacketLifeTime,
        null,
        result.remote +
          " maxPacketLifeTime is:" +
          result.remote.maxPacketLifeTime
      );
    });
  },

  function SEND_MESSAGE_THROUGH_LAST_OPENED_CHANNEL2(test) {
    var channels = test.pcRemote.dataChannels;
    var message = "I am the walrus; Goo goo g'joob";

    info("Sending message:" + message);
    return test.send(message).then(result => {
      is(
        channels.indexOf(result.channel),
        channels.length - 1,
        "Last channel used"
      );
      is(result.data, message, "Received message has the correct content.");
    });
  },

  function CREATE_NEGOTIATED_DATA_CHANNEL_MAX_PACKET_LIFE_TIME(test) {
    var options = {
      ordered: false,
      maxPacketLifeTime: 10,
    };
    return test.createDataChannel(options).then(result => {
      is(
        result.local.binaryType,
        "blob",
        result.local + " is of binary type 'blob'"
      );
      is(
        result.local.protocol,
        "",
        result.local + " protocol is:" + result.local.protocol
      );
      is(
        result.local.reliable,
        false,
        result.local + " reliable is:" + result.local.reliable
      );
      is(
        result.local.ordered,
        options.ordered,
        result.local + " ordered is:" + result.local.ordered
      );
      is(
        result.local.maxRetransmits,
        null,
        result.local + " maxRetransmits is:" + result.local.maxRetransmits
      );
      is(
        result.local.maxPacketLifeTime,
        options.maxPacketLifeTime,
        result.local + " maxPacketLifeTime is:" + result.local.maxPacketLifeTime
      );

      is(
        result.remote.binaryType,
        "blob",
        result.remote + " is of binary type 'blob'"
      );
      is(
        result.remote.protocol,
        "",
        result.remote + " protocol is:" + result.remote.protocol
      );
      is(
        result.remote.reliable,
        false,
        result.remote + " reliable is:" + result.remote.reliable
      );
      is(
        result.remote.ordered,
        options.ordered,
        result.remote + " ordered is:" + result.remote.ordered
      );
      is(
        result.remote.maxRetransmits,
        null,
        result.remote + " maxRetransmits is:" + result.remote.maxRetransmits
      );
      is(
        result.remote.maxPacketLifeTime,
        options.maxPacketLifeTime,
        result.remote +
          " maxPacketLifeTime is:" +
          result.remote.maxPacketLifeTime
      );
    });
  },

  function SEND_MESSAGE_THROUGH_LAST_OPENED_CHANNEL3(test) {
    var channels = test.pcRemote.dataChannels;
    var message = "Nice to see you working maxPacketLifeTime";

    info("Sending message:" + message);
    return test.send(message).then(result => {
      is(
        channels.indexOf(result.channel),
        channels.length - 1,
        "Last channel used"
      );
      is(result.data, message, "Received message has the correct content.");
    });
  },
];

var commandsCheckLargeXfer = [
  function SEND_BIG_BUFFER(test) {
    var size = 2 * 1024 * 1024; // SCTP internal buffer is now 1MB, so use 2MB to ensure the buffer gets full
    var buffer = new ArrayBuffer(size);
    // note: type received is always blob for binary data
    var options = {};
    options.bufferedAmountLowThreshold = 64 * 1024;
    info("Sending arraybuffer");
    return test.send(buffer, options).then(result => {
      ok(result.data instanceof Blob, "Received data is of instance Blob");
      is(result.data.size, size, "Received data has the correct size.");
    });
  },
];

function addInitialDataChannel(chain) {
  chain.insertBefore("PC_LOCAL_CREATE_OFFER", commandsCreateDataChannel);
  chain.insertBefore(
    "PC_LOCAL_WAIT_FOR_MEDIA_FLOW",
    commandsWaitForDataChannel
  );
  chain.removeAfter("PC_REMOTE_CHECK_ICE_CONNECTIONS");
  chain.append(commandsCheckDataChannel);
}

Messung V0.5
C=99 H=100 G=99

¤ Dauer der Verarbeitung: 0.26 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge