コード例 #1
0
ReaderServicePtr LibraryManager::getReaderService(ReaderUnitPtr reader, ReaderServiceType type)
{
    ReaderServicePtr srv;
    for (auto &&itr : libLoaded)
    {
        IDynLibrary *lib = itr.second;

        if (lib->hasSymbol("getReaderService"))
        {
            int (*fptr)(ReaderUnitPtr, ReaderServicePtr &, ReaderServiceType) = nullptr;
            fptr = reinterpret_cast<decltype(fptr)>(lib->getSymbol("getReaderService"));
            assert(fptr);
            fptr(reader, srv, type);
            if (srv)
                break;
        }
    }
    return srv;
}
コード例 #2
0
std::shared_ptr<CardService> LibraryManager::getCardService(std::shared_ptr<Chip> chip,
                                                            CardServiceType type)
{
    std::shared_ptr<CardService> srv;
    for (auto &&itr : libLoaded)
    {
        IDynLibrary *lib = itr.second;

        if (lib->hasSymbol("getCardService"))
        {
            int (*fptr)(std::shared_ptr<Chip>, std::shared_ptr<CardService> &, CardServiceType) = nullptr;
            fptr = reinterpret_cast<decltype(fptr)>(lib->getSymbol("getCardService"));
            assert(fptr);
            fptr(chip, srv, type);
            if (srv)
                break;
        }
    }
    return srv;
}
コード例 #3
0
    std::shared_ptr<AccessControlCardService> LibraryManager::getAccessControlCardService(
            std::shared_ptr<Chip> chip)
    {
        std::shared_ptr<AccessControlCardService> srv;
        for (auto &&itr : libLoaded)
        {
            const std::string &libname = itr.first;
            IDynLibrary *lib = itr.second;

            int (*fptr)(std::shared_ptr<Chip>, std::shared_ptr<AccessControlCardService> &) = nullptr;
            if (lib->hasSymbol("getAccessControlCardService"))
            {
                fptr = reinterpret_cast<decltype(fptr)>(lib->getSymbol("getAccessControlCardService"));
                assert(fptr);
                fptr(chip, srv);
                if (srv)
                    break;
            }
        }
        return srv;
    }
コード例 #4
0
    std::shared_ptr<ReaderUnit> LibraryManager::getReader(const std::string &readerName) const
    {
        // The idea here is simply to loop over all shared library
        // and opportunistically call the `getReaderUnit()` function if it exists, hoping
        // that some module will be able to fulfil our request.
        std::shared_ptr<ReaderUnit> readerUnit;
        for (auto &&itr : libLoaded)
        {
            IDynLibrary *lib = itr.second;

            if (lib->hasSymbol("getReaderUnit"))
            {
				int(*fptr)(const std::string &, std::shared_ptr<ReaderUnit> &) = nullptr;
                fptr = reinterpret_cast<decltype(fptr)>(lib->getSymbol("getReaderUnit"));
                assert(fptr);
                fptr(readerName, readerUnit);
                if (readerUnit)
                    break;
            }
        }
        return readerUnit;
    }