/** 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