with
lace_demo_Events,
ada.real_Time;
package body lace_demo_Keyboard
is
use lace_demo_Events,
Lace,
ada.real_Time;
--- Simulated Keyboard
--
the_event_Subject : constant Subject.local.view := Subject.local.forge.new_Subject ("demo.Subject");
task type simulated_Keyboard
is
entry start;
entry stop;
end simulated_Keyboard;
task body simulated_Keyboard
is
Count : Natural := 0;
Now : ada.real_Time.Time := ada.real_Time.Clock;
Done : Boolean := False;
begin
accept start;
loop
select
accept stop
do
Done := True;
end stop;
or
delay until Now;
end select;
exit when Done;
if Count mod 3 = 0
then
the_event_Subject.emit (the_Event => keyboard_Event'(key => 'a'));
else
the_event_Subject.emit (the_Event => keyboard_Event'(key => 'b'));
end if;
Count := Count + 1;
Now := Now + to_time_Span (0.5);
end loop;
end simulated_Keyboard;
the_simulated_Keyboard : simulated_Keyboard;
function as_event_Subject return lace.Subject.local.view
is
begin
return the_event_Subject;
end as_event_Subject;
procedure start
is
begin
the_simulated_Keyboard.start;
end start;
procedure stop
is
begin
the_simulated_Keyboard.stop;
end stop;
end lace_demo_Keyboard;