with
lace_demo_Events,
lace_demo_Keyboard,
lace.Observer.instant,
lace.Subject .local,
lace.Response,
lace.Event.utility,
ada.Text_IO,
ada.Strings.unbounded,
ada.real_Time;
procedure launch_simple_instant_events_Demo
--
-- A simple demonstration of the Lace event system.
--
is
use lace_demo_Events,
Lace,
lace.Event,
lace.event.Utility,
ada.Text_IO,
ada.Strings.unbounded,
ada.real_Time;
-- key_Response
--
type key_Map_of_message is array (Character) of unbounded_String;
type key_Response is new Response.item with
record
key_to_message_Map : key_Map_of_message;
end record;
overriding
procedure respond (Self : in out key_Response; to_Event : in Event.item'Class)
is
the_Event : keyboard_Event renames keyboard_Event (to_Event);
begin
put_Line ( "Message is: " -- Our response is to display the message associated
& to_String (Self.key_to_message_Map (the_Event.Key))); -- with the keyboard event key on the console.
end respond;
-- Globals
--
the_Subject : Subject.local.view;
the_Observer : constant Observer.instant.view := Observer.instant.forge.new_Observer ("demo.Observer");
the_Response : aliased key_Response := (Response.item with
key_to_message_Map => ('a' => to_unbounded_String ("'a' was received from demo keyboard."),
'b' => to_unbounded_String ("'b' was received from demo keyboard."),
others => to_unbounded_String ("Unhandled key was received from demo keyboard.")));
Now : ada.real_Time.Time := ada.real_Time.Clock;
begin
event.Utility.use_text_Logger (log_filename => "events_demo"); -- Enable simple text file event logging.
the_Subject := lace_demo_Keyboard.as_event_Subject; -- Get a reference to the keyboard as an event subject.
event.Utility.connect (the_observer => Observer.view (the_Observer), -- Setup our response to a keyboard event.
to_subject => Subject .view (the_Subject),
with_response => the_Response'unchecked_Access,
to_event_kind => to_Kind (keyboard_Event'Tag));
lace_demo_Keyboard.start;
for Each in 1 .. 5
loop -- Our main loop.
Now := Now + to_time_Span (1.0);
delay until Now;
end loop;
lace_demo_Keyboard.stop;
event.Utility.close; -- Ensure event logging is closed (ie saved to log file).
end launch_simple_instant_events_Demo;