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 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 {}; 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 { declare namespace lib_plankton.file {
/** /**
* @author fenris * @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>( _queue = {
call_real "items": [],
); "busy": false,
};
return Promise.resolve<void>(undefined); return Promise.resolve<void>(undefined);
} }
@ -253,14 +263,56 @@ namespace _dali.backend
&& &&
(http_response.status_code < 300) (http_response.status_code < 300)
) )
) ) {
{
return Promise.reject<any>(http_response.body.toString()); 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 else
{ {
const output : any = lib_plankton.json.decode(http_response.body.toString()); _queue.busy = true;
return Promise.resolve<any>(output); 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, "action": action,
"input": input, "input": input,
}; };
return ( const promise : Promise<any> = new Promise<any>(
new Promise<any>( (resolve, reject) => {
(resolve, reject) => { _queue.items.push(
lib_plankton.call.queue_add<type_request, any>( {
_queue, "request": request,
request, "resolve": resolve,
resolve, "reject": reject,
reject }
); );
} }
)
); );
process();
return promise;
} }