-- Foundation for a Remote I/O Server
-- Copyright (C)2020-2023, Philip Munts dba Munts Technologies.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are met:
--
-- * Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- POSSIBILITY OF SUCH DAMAGE.
WITH Ada.Strings.Fixed;
WITH libLinux;
WITH Logging.libsimpleio;
WITH RemoteIO.Common;
PACKAGE BODY RemoteIO.Server.Foundation IS
PRAGMA Warnings(Off, "variable ""disp"" is assigned but never read");
-- Persistent variables
exec : RemoteIO.Executive.Executor;
disp : RemoteIO.Common.Dispatcher;
PROCEDURE Initialize(title : String; capabilities : String) IS
error : Integer;
vers : RemoteIO.Server.ResponseString;
caps : RemoteIO.Server.ResponseString;
BEGIN
PRAGMA Warnings(Off, """error"" modified by call, but value overwritten *");
libLinux.OpenLog(title, liblinux.LOG_NDELAY + libLinux.LOG_PID +
libLinux.LOG_PERROR, libLinux.LOG_DAEMON, error);
-- Switch to background execution
libLinux.Detach(error);
IF error /= 0 THEN
Logging.libsimpleio.Error("libLinux.Detach() failed", error);
RETURN;
END IF;
-- Pad response strings
Ada.Strings.Fixed.Move(title, vers, Pad => ASCII.NUL);
Ada.Strings.Fixed.Move(capabilities, caps, Pad => ASCII.NUL);
-- Create an Executor instance
exec := RemoteIO.Executive.Create;
-- Create a common command dispatcher instance
disp := RemoteIO.Common.Create(exec, vers, caps);
END Initialize;
FUNCTION Executor RETURN Remoteio.Executive.Executor IS
BEGIN
RETURN exec;
END Executor;
END RemoteIO.Server.Foundation;