Source code

Revision control

Copy as Markdown

Other Tools

"use strict";
// ?download: records that the request arrived and never responds, so that no
// actual download happens.
// ?arrived: long-polls, responding once a ?download request has arrived.
// ?release: finishes the pending ?download response and resets the state.
function handleRequest(request, response) {
response.setHeader("Cache-Control", "no-store", false);
switch (request.queryString) {
case "download":
response.processAsync();
setState("arrived", "1");
setObjectState("pendingResponse", response);
getObjectState("arrivedWaiter", waiter => {
if (waiter) {
setObjectState("arrivedWaiter", null);
waiter.finish();
}
});
break;
case "arrived":
if (getState("arrived") !== "1") {
response.processAsync();
setObjectState("arrivedWaiter", response);
}
break;
case "release":
getObjectState("pendingResponse", pending => {
setObjectState("pendingResponse", null);
pending?.finish();
});
setState("arrived", "");
break;
}
}