Compare commits

..

No commits in common. "9e24750d4d8eb8d42aa705551ec60fdab3b9316b" and "2b11b5781893e715bd1b098a961b930a5ace884b" have entirely different histories.

3 changed files with 350 additions and 280 deletions

View file

@ -887,35 +887,6 @@ declare namespace lib_plankton.call {
export function null_prop<type_value_from, type_value_to>(value_from: (null | type_value_from), function_: ((value: type_value_from) => type_value_to)): (null | type_value_to);
export {};
}
declare namespace lib_plankton.call {
/**
*/
type type_queue_item<type_data, type_result> = {
data: type_data;
resolve: ((result: type_result) => void);
reject: ((reason: any) => void);
};
/**
*/
export type type_queue<type_data, type_result> = {
handler: ((data: type_data) => Promise<type_result>);
items: Array<type_queue_item<type_data, type_result>>;
busy: boolean;
paused: boolean;
};
/**
*/
export function queue_make<type_data, type_result>(handler: ((data: type_data) => Promise<type_result>)): type_queue<type_data, type_result>;
/**
*/
export function queue_toggle_paused<type_data, type_result>(queue_subject: type_queue<type_data, type_result>, { "mode": mode, }?: {
mode?: (null | boolean);
}): void;
/**
*/
export function queue_add<type_data, type_result>(queue_subject: type_queue<type_data, type_result>, data: type_data, resolve: ((result: type_result) => void), reject: ((reason: any) => void)): void;
export {};
}
declare namespace lib_plankton.file {
/**
* @author fenris

File diff suppressed because it is too large Load diff

View file

@ -127,7 +127,16 @@ namespace _dali.backend
/**
*/
var _queue : lib_plankton.call.type_queue<type_request, any>;
var _queue : {
items : Array<
{
request : type_request;
resolve : ((result : any) => void);
reject : ((reason : any) => void);
}
>;
busy : boolean;
};
/**
@ -151,9 +160,10 @@ namespace _dali.backend
)
*/
);
_queue = lib_plankton.call.queue_make<type_request, any>(
call_real
);
_queue = {
"items": [],
"busy": false,
};
return Promise.resolve<void>(undefined);
}
@ -253,14 +263,56 @@ namespace _dali.backend
&&
(http_response.status_code < 300)
)
)
{
) {
return Promise.reject<any>(http_response.body.toString());
}
else {
const output : any = lib_plankton.json.decode(http_response.body.toString());
return Promise.resolve<any>(output);
}
}
/**
*/
async function process(
)
: Promise<void>
{
if (_queue.busy)
{
// do nothing
}
else
{
const output : any = lib_plankton.json.decode(http_response.body.toString());
return Promise.resolve<any>(output);
_queue.busy = true;
while (_queue.items.length > 0)
{
const entry = _queue.items.shift();
let successful : boolean;
let reason : any;
let result : any;
try
{
result = await call_real(entry.request);
successful = true;
}
catch (error)
{
reason = error;
successful = false;
}
if (successful)
{
entry.resolve(result);
}
else
{
entry.reject(reason);
}
}
_queue.busy = false;
// process();
}
}
@ -279,18 +331,19 @@ namespace _dali.backend
"action": action,
"input": input,
};
return (
new Promise<any>(
(resolve, reject) => {
lib_plankton.call.queue_add<type_request, any>(
_queue,
request,
resolve,
reject
);
}
)
const promise : Promise<any> = new Promise<any>(
(resolve, reject) => {
_queue.items.push(
{
"request": request,
"resolve": resolve,
"reject": reject,
}
);
}
);
process();
return promise;
}