Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="author" title="He Yue" href="mailto:yue.he@intel.com">
<link rel="author" title="Tomoyuki Shimizu" href="https://github.com/tomoyukilabs/">
<script src="../common.js"></script>
<script src="stash.js"></script>
<script>
const message1 = '1st';
const message2 = '2nd';
const message3 = new Uint8Array([51, 114, 100]); // "3rd"
const message4 = new Uint8Array([52, 116, 104]); // "4th"
const message5 = new Uint8Array([108, 97, 115, 116]); // "last"
const toUint8Array = buf => {
return buf instanceof ArrayBuffer ? new Uint8Array(buf) : buf;
}
// convert ArrayBuffer or Uint8Array into string
const toText = buf => {
const arr = toUint8Array(buf);
return !buf ? null : arr.reduce((result, item) => {
return result + String.fromCharCode(item);
}, '');
}
// compare two ArrayBuffer or Uint8Array
const compare = (a, b) => {
const p = toUint8Array(a);
const q = toUint8Array(b);
return !!p && !!q && p.every((item, index) => { return item === q[index]; });
};
const stash = new Stash(stashIds.toReceiver, stashIds.toController);
let connection, count = 0;
const addConnection = c => {
let result = [], testCase;
connection = c;
count++;
connection.onmessage = event => {
// PresentationConnection_send-manual.https.html
if (testCase === 'send') {
if (typeof event.data === 'string') {
result.push({ type: 'text', data: event.data });
}
// default value of connection.binaryType is "arraybuffer"
else if(event.data instanceof ArrayBuffer) {
result.push({ type: 'binary', data: toText(event.data) });
if (compare(event.data, message5)) {
stash.send(JSON.stringify(result));
}
}
else {
result.push({ type: 'error' });
}
}
};
stash.receive().then(data => {
testCase = data;
// PresentationConnection_send-manual.https.html
if (testCase === 'send') {
stash.send('ok');
}
// PresentationConnection_onmessage-manual.https.html
else if (testCase === 'onmessage') {
connection.send(message1); // string
connection.send(message2); // string
connection.send(new Blob([message3])); // Blob
connection.send(message4.buffer); // ArrayBuffer
connection.send(message5); // ArrayBufferView
stash.receive().then(data => {
connection.send(message5);
});
}
// PresentationConnection_onclose-manual.https.html
else if (testCase === 'close') {
connection.close();
}
});
};
navigator.presentation.receiver.connectionList
.then(list => {
list.onconnectionavailable = evt => {
addConnection(evt.connection);
};
list.connections.map(connection => {
addConnection(connection);
});
});
</script>