Skip to content
main.cpp 2.66 KiB
Newer Older
/**
 * @copyright Copyright (c) 2021-2022 B-com http://www.b-com.com/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
* World Storage API
* API ensuring interoperability between an authoring tool and a World Storage service
*
* The version of the OpenAPI document: 0.0.1
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/

#include <signal.h>
#include <boost/log/core.hpp>
#include <core/Log.h>
#include <xpcf/xpcf.h>
#include <api/service/IServiceWorldGraph.h>

namespace xpcf = org::bcom::xpcf;

using namespace SolAR;
using namespace SolAR::api;

// Global service instance
SRef<service::IServiceWorldGraph> worldGraphService = 0;

// Function called when interruption signal is triggered to close the service.
static void SigInt(int /* signo */) {

    LOG_INFO("\n\n===> Program interruption\n");

    LOG_INFO("Stop World Graph Service");

    if (worldGraphService != 0) {
        worldGraphService->stop();
    }

    LOG_INFO("World Graph Service stopped");

    exit(0);
}

int main() {

    try {

#if NDEBUG
        boost::log::core::get()->set_logging_enabled(false);
#endif

        //init the logger
        LOG_ADD_LOG_TO_CONSOLE();
        LOG_INFO("program is running");

        // Signal interruption function (Ctrl + C)
        signal(SIGINT, SigInt);

        /* instantiate component manager*/
        /* this is needed in dynamic mode */
        SRef<xpcf::IComponentManager> xpcfComponentManager = xpcf::getComponentManagerInstance();

        if(xpcfComponentManager->load("SolARService_World_Storage_conf.xml")!=org::bcom::xpcf::_SUCCESS)
        {
            LOG_ERROR("Failed to load the configuration file SolARService_World_Storage_conf.xml");
            return -1;
        }
        worldGraphService = xpcfComponentManager->resolve<service::IServiceWorldGraph>();

        // init and start the World Graph Service
        worldGraphService->init();
        worldGraphService->start();

        return EXIT_SUCCESS;
    }

    catch (xpcf::Exception e)
    {
        LOG_ERROR("Exception raised : \n {}", e.what())
        return -1;
    }
    return 0;

}