// Copyright (c) 2010 Martin Knafve / hMailServer.com. // http://www.hmailserver.com #include "StdAfx.h" //#include "../../hMailServer/hMailServer.h" #include "../../COM/InterfaceResult.h" #include "../../COM/InterfaceMessage.h" #include "../../COM/InterfaceClient.h" #include "../../COM/InterfaceEventLog.h" #include "../../COM/InterfaceFetchAccount.h" #include "../../COM/InterfaceAccount.h" //#include "IScriptObject.h" #include "ScriptObjectContainer.h" #include "Result.h" #ifdef _DEBUG #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) #define new DEBUG_NEW #endif namespace HM { ScriptObjectContainer::ScriptObjectContainer(void) { // Default objects std::shared_ptr pDummy; AddObject("EventLog", pDummy, ScriptObject::OTEventLog); } ScriptObjectContainer::~ScriptObjectContainer(void) { } void ScriptObjectContainer::AddObject(const String &sName, ScriptObject::ObjectType type) { std::shared_ptr pObject = std::shared_ptr(new ScriptObject); pObject->eType = type; pObject->sName = sName; objects_[sName] = pObject; } void ScriptObjectContainer::AddObject(const String &sName, std::shared_ptr pObj, ScriptObject::ObjectType type) { std::shared_ptr pObject = std::shared_ptr(new ScriptObject); pObject->eType = type; pObject->sName = sName; pObject->pObject = pObj; objects_[sName] = pObject; } bool ScriptObjectContainer::GetObjectByName(const String &sName, LPUNKNOWN* ppunkItem) const { std::map >::const_iterator iterPos = objects_.find(sName); if (iterPos == objects_.end()) return false; std::shared_ptr pObj = (*iterPos).second; switch (pObj->eType) { case ScriptObject::OTResult: { CComObject *pResultInt = new CComObject(); std::shared_ptr pResult = std::static_pointer_cast(pObj->pObject); pResultInt->AttachItem(pResult); pResultInt->QueryInterface(ppunkItem); return true; } case ScriptObject::OTMessage: { CComObject *pInterface = new CComObject(); std::shared_ptr pObject = std::static_pointer_cast(pObj->pObject); pInterface->AttachItem(pObject); pInterface->QueryInterface(ppunkItem); return true; } case ScriptObject::OTClient: { CComObject *pInterface = new CComObject(); std::shared_ptr pObject = std::static_pointer_cast(pObj->pObject); pInterface->AttachItem(pObject); pInterface->QueryInterface(ppunkItem); return true; } case ScriptObject::OTEventLog: { CComObject *pInterface = new CComObject(); pInterface->QueryInterface(ppunkItem); return true; } case ScriptObject::OTFetchAccount: { CComObject *pInterface = new CComObject(); std::shared_ptr pObject = std::static_pointer_cast(pObj->pObject); pInterface->AttachItem(pObject); pInterface->QueryInterface(ppunkItem); return true; } case ScriptObject::OTAccount: { CComObject *pInterface = new CComObject(); std::shared_ptr pObject = std::static_pointer_cast(pObj->pObject); pInterface->AttachItem(pObject); pInterface->QueryInterface(ppunkItem); return true; } default: return true; } return true; } std::vector ScriptObjectContainer::GetObjectNames() { std::vector vecNames; auto iterPos = objects_.begin(); while (iterPos != objects_.end()) { vecNames.push_back((*iterPos).second->sName); iterPos++; } return vecNames; } }