source/logic/helpers.ts
6faf71a8
 /**
  * gets the current UNIX timestamp
  */
 function get_timestamp
 (
 ): int
 {
 	return Math.floor(Date.now()/1000);
 }
 
 
 /**
  * computes a floating point number in the interval [0,1[ out of a string
  */
 function hash_string_to_unit
 (
 	x: string
 ): float
 {
 	return (x.split("").reduce((x, y) => ((x + y.charCodeAt(0)) % 32), 0) / 32);
 }
 
 
 /**
  * encodes a username as a CSS color
  */
 function get_usercolor
 (
 	name: string
 ): string
 {
 	const hue: float = hash_string_to_unit(name);
 	return `hsl(${(hue*360).toFixed(2)},50%,75%)`;
 }
 
 
 /**
  * calls an API action of the backend
  */
 async function backend_call
 (
 	conf: type_conf,
 	connection_id: (null | string),
 	action: string, data: any
 ): Promise<any>
 {
 	const response: any = await fetch
 	(
 		`${conf.backend.scheme}://${conf.backend.host}:${conf.backend.port.toFixed(0)}/${conf.backend.path}`,
 		{
 			"method": "POST",
 			"body": JSON.stringify({"id": connection_id, "action": action, "data": data}),
 		}
 	);
 	if (response.ok)
 	{
 		return response.json();
 	}
 	else
 	{
 		console.error(response.text());
 		return Promise.reject<any>(new Error("backend call failed"));
 	}
 }