Skip to content

Instantly share code, notes, and snippets.

@bartlomieju
Created October 22, 2019 09:44
Show Gist options
  • Save bartlomieju/8fa61a6a53b6263eb5f7d95020f2e9dc to your computer and use it in GitHub Desktop.
Save bartlomieju/8fa61a6a53b6263eb5f7d95020f2e9dc to your computer and use it in GitHub Desktop.
'use strict';
const buff = new Uint8Array(16384);
const encode = new TextEncoder().encode;
function sendRequest (conn) {
console.log("sending request");
conn.write(encode('GET / HTTP/1.1\nHost: example.com\n\n')).then(() => console.log("request sent"));
}
let i = 0;
let to;
function doStep (conn) {
switch (i) {
case 0: {
console.log('Sending req #1 (normal)');
sendRequest(conn);
} break;
case 1: {
console.log('Sending req #2 (Immediate promise resolution)');
new Promise(r => r()).then(() => {
console.log('Resolved! (sending) #2');
sendRequest(conn);
});
} break;
case 2: {
console.log('Sending req #3 (Delayed promise resolution)');
new Promise(r => setTimeout(r, 100)).then(() => {
console.log('Resolved! (sending) #3');
sendRequest(conn);
});
} break;
case 3: {
console.log('All responses recieved correctly, exiting.');
Deno.exit();
} break;
}
clearTimeout(to);
to = setTimeout(() => {
console.log('No response after 8 seconds, exiting.');
Deno.exit();
}, 8e3);
i++;
}
Deno.dialTLS({hostname: 'example.com', port: 443 }).then(conn => {
const dataLoop = () => {
console.log("reading");
conn.read(buff)
.then(() => {
console.log('Response!', new TextDecoder().decode(buff).slice(0, 100));
doStep(conn);
})
.catch(error => {
throw error;
})
.finally(dataLoop);
};
dataLoop();
doStep(conn);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment