blob: 9f8296413d63b16265d920db9f47057cfe2d2e72 [file] [log] [blame]
/* -*- C++ -*- */
/*
* Copyright 2003-2004 The Apache Software Foundation.
*
* 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.
*
*/
#if !defined(__HANDLERLOADER_H_OF_AXIS_INCLUDED__)
#define __HANDLERLOADER_H_OF_AXIS_INCLUDED__
#include "../platforms/PlatformAutoSense.hpp"
#include "../common/MessageData.h"
#include <axis/GDefine.hpp>
#include <axis/server/WrapperClassHandler.hpp>
#include "SharedObject.h"
#include "AxisEngineException.h"
#include "../common/AxisConfigException.h"
#include <map>
#include <string>
using namespace std;
#define CREATE_FUNCTION "GetClassInstance"
#define DELETE_FUNCTION "DestroyInstance"
AXIS_CPP_NAMESPACE_START
typedef int (* CREATE_OBJECT) (BasicHandler** inst);
typedef int (* DELETE_OBJECT) (BasicHandler* inst);
AXIS_CPP_NAMESPACE_END
//status codes
/*#define HANDLER_INIT_FAIL 1
#define CREATION_FAILED 2
#define LOADLIBRARY_FAILED 3
#define LIBRARY_PATH_EMPTY 4
#define HANDLER_NOT_LOADED 5
#define HANDLER_BEING_USED 6
#define GET_HANDLER_FAILED 7
#define WRONG_HANDLER_TYPE 8
#define NO_HANDLERS_CONFIGURED 9
*/
/*
* @class HandlerLoader
* @brief
*
*
*
* @author Susantha Kumara (skumara@virtusa.com)
*/
AXIS_CPP_NAMESPACE_START
class HandlerLoader:protected SharedObject
{
private:
class HandlerInformation
{
public:
string m_sLib;
int m_nLoadOptions;
DLHandler m_Handler;
CREATE_OBJECT m_Create;
DELETE_OBJECT m_Delete;
int m_nObjCount;
public:
HandlerInformation ()
{
m_sLib = "";
m_nObjCount = 0;
}
};
map <int, HandlerInformation*>m_HandlerInfoList;
public:
int createHandler (BasicHandler** pHandler, int nLibId);
int deleteHandler (BasicHandler* pHandler, int nLibId);
HandlerLoader ();
~HandlerLoader ();
private:
int loadLib (HandlerInformation* pHandlerInfo);
int unloadLib (HandlerInformation* pHandlerInfo);
};
AXIS_CPP_NAMESPACE_END
#endif