Compare commits

...

2 commits

Author SHA1 Message Date
fenris 9e24750d4d [mod] queueing ausgelagern 2025-10-24 00:23:53 +02:00
fenris c0abe0a180 [upd] plankton 2025-10-24 00:23:29 +02:00
3 changed files with 280 additions and 350 deletions

View file

@ -887,6 +887,35 @@ 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,16 +127,7 @@ namespace _dali.backend
/** /**
*/ */
var _queue : { var _queue : lib_plankton.call.type_queue<type_request, any>;
items : Array<
{
request : type_request;
resolve : ((result : any) => void);
reject : ((reason : any) => void);
}
>;
busy : boolean;
};
/** /**
@ -160,10 +151,9 @@ namespace _dali.backend
) )
*/ */
); );
_queue = { _queue = lib_plankton.call.queue_make<type_request, any>(
"items": [], call_real
"busy": false, );
};
return Promise.resolve<void>(undefined); return Promise.resolve<void>(undefined);
} }
@ -263,60 +253,18 @@ 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 { else
{
const output : any = lib_plankton.json.decode(http_response.body.toString()); const output : any = lib_plankton.json.decode(http_response.body.toString());
return Promise.resolve<any>(output); return Promise.resolve<any>(output);
} }
} }
/**
*/
async function process(
)
: Promise<void>
{
if (_queue.busy)
{
// do nothing
}
else
{
_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();
}
}
/** /**
*/ */
async function call( async function call(
@ -331,19 +279,18 @@ namespace _dali.backend
"action": action, "action": action,
"input": input, "input": input,
}; };
const promise : Promise<any> = new Promise<any>( return (
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;
} }