| <!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/"> |
| <link rel="help" href="http://w3c.github.io/presentation-api/#interface-presentationconnectionlist"> |
| <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> |