/**
<html>
<title> DLP EAI-like NodeName::FieldName Emulation </title>
<body bgcolor=white>

<br>
<br> EAI-like set_field / get_field emulation for stand-alone server

<pre>
**/

:-object pxsync_get.

	pxsync_get(0, _Name).
	pxsync_get(I,  Name) :-
		get_field_event(Name, position, POS),
		format('~w~tget ~w::position = ~w~n', [this, Name, POS]),
		N is I - 1,
		pxsync_get(N, Name).

:-end_object pxsync_get.

:-object pxpoll_get.

	pxpoll_get(0,_Name,_Delay).
	pxpoll_get(I, Name, Delay) :-
		sleep(Delay),
		get_field(Name, position, POS),
		format('~w~tget ~w::position = ~w~n', [this, Name, POS]),
		N is I - 1,
		pxpoll_get(N, Name, Delay).

:-end_object pxpoll_get.


:-object pxdata_set.

	var xyz = 0.

	pos_field(XYZ) :-
		X = XYZ, Y = XYZ, Z = XYZ,
		POS = [X, Y, Z],
		%% POS = [XYZ, XYZ, XYZ],
		format('~n~w~tset field: ~w~n', [this, POS]),
		set_field(blue4, position, POS),
		set_field(blue8, position, POS),
		set_field(red10, position, POS).

	pxdata_set(I, Delay) :-
		repeat,
			++ xyz,
			sleep(Delay),
			pos_field(xyz),
		xyz = I,
		!.

:-end_object pxdata_set.


:-object pxdata.

	main :-
		set_field(blue4, position, [un, de, fined]),
		set_field(blue8, position, [un, de, fined]),
		set_field(red10, position, [un, de, fined]),
		new(pxpoll_get(15, blue4, 1500), _),
		new(pxsync_get(10, blue8), _),
		new(pxsync_get(10, red10), _),
		new(pxdata_set(10,  2000), _).

:-end_object pxdata.

/**
</body>
</html>
**/
