/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
* This file contains the headers of Plugin, FrontendPlugin,
* CommChannelPlugin and CommChannelPluginObserver classes and implementation
* of DummyCommObserver.
*/
#ifndef PLUGIN_H
#define PLUGIN_H
#pragma warning ( disable : 4786 )
#include <string>
#include "common.h"
using namespace std;
//**********************************************************************************
// Class Plugin
//
//**********************************************************************************
class Plugin
{
public:
enum PluginType { null, dummy, frontend, comm_channel };
public:
virtual PluginType GetType() { return null; }
virtual DWORD Init();
virtual const string& GetName(string *name = NULL);
protected:
Plugin();
protected:
string m_Name;
};
//**********************************************************************************
// Class FrontendPlugin
//
//**********************************************************************************
class FrontendPlugin : public Plugin
{
public:
virtual PluginType GetType() { return frontend; }
virtual DWORD Init();
};
//**********************************************************************************
// Class CommChannelPluginObserver
//
//**********************************************************************************
class CommChannelPluginObserver
{
public:
virtual void NotifyDataAvailable() = 0;
virtual void NotifyCommChannelOpened() = 0;
virtual void NotifyCommChannelClosed() = 0;
};
//**********************************************************************************
// Class DummyCommObserver
//
//**********************************************************************************
class DummyCommObserver : public CommChannelPluginObserver
{
public:
void NotifyDataAvailable() { };
void NotifyCommChannelOpened() { };
void NotifyCommChannelClosed() { };
};
//**********************************************************************************
// Class CommChannelPlugin
//
// This class is the parent class of all communication channel plugins used
// in DataGateway.
//**********************************************************************************
class CommChannelPlugin : public Plugin
{
public:
PluginType GetType() { return comm_channel; }
virtual DWORD Init();
virtual DWORD Open() = 0;
virtual bool IsOpen() { return m_Open; }
/*
* This method closes and deletes the instance of plugin
*/
virtual DWORD Close() = 0;
/*
* This method is used to send Data object and Receive Data object
*/
virtual DWORD SendReceive(Data* data_in, Data** data_out, long timeout = 5000) = 0;
/*
* This method is used to send Data object
*/
virtual DWORD Send(Data* data_in, long timeout = 5000) = 0;
/*
* This method is used to receive Data object
*/
virtual DWORD Receive(Data** data_out, long timeout = 5000) = 0;
/*
* This method creates instance of specified plugin
*/
static CommChannelPlugin* Instance(const string& pluginname,
const CommChannelPluginObserver* observer = NULL);
/*
* This method initializes and connects the instance of plugin
*/
static DWORD Connect();
/*
* This method closes and deletes the instance of plugin
*/
static DWORD Disconnect();
protected:
CommChannelPlugin(const CommChannelPluginObserver* observer = NULL);
const CommChannelPluginObserver* GetObserver() { return m_Observer; }
protected:
const CommChannelPluginObserver* m_Observer;
bool m_Open;
private:
static CommChannelPlugin* m_Self;
};
#endif
// End of the file