⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfggroup.cpp

📁 testing java sample application
💻 CPP
字号:
// CfgGroup.cpp: implementation of the CCfgGroup class.
//
//////////////////////////////////////////////////////////////////////
/*

MultiX Network Applications Development Toolkit.
Copyright (C) 2007, Moshe Shitrit, Mitug Distributed Systems Ltd., All Rights Reserved.

This file is part of MultiX.

MultiX is free software; you can redistribute it and/or modify it under the terms of the 
GNU General Public License as published by the Free Software Foundation; 
either version 2 of the License, or (at your option) any later version. 

MultiX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program;
if not, write to the 
Free Software Foundation, Inc., 
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--------------------------------------------------------------------------------
Author contact information: 
msr@mitug.co.il
--------------------------------------------------------------------------------

*/

#include "StdAfx.h"
#include "CfgGroup.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCfgGroup::CCfgGroup(int32_t	GroupID)
{
	m_GroupID	=	GroupID;
//	m_bOwnGroup	=	bOwnGroup;

}

CCfgGroup::~CCfgGroup()
{

}

//////////////////////////////////////////////////////////////////////
// CCfgGroupProcess Class
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCfgGroupProcessClass::CCfgGroupProcessClass()
{

}

CCfgGroupProcessClass::~CCfgGroupProcessClass()
{

}

void CCfgGroup::UpdateProcessClassesTable(MultiXTpm__Group	*Group,CTpmConfig	&Config)
{
//	if(!m_bOwnGroup)
	{
		for(TCfgGroupProcessClasses::iterator	I	=	m_ProcessClasses.begin();I!=m_ProcessClasses.end();I++)
		{
			I->second->SetAction(CCfgItem::DeleteItemAction);
		}
	}
	if(Group->ProcessClassIDs	==	NULL)
		return;
	for(unsigned	int	J=0;J	<	Group->ProcessClassIDs->ID.size();J++)
	{
		int	ProcessClassID	=	Group->ProcessClassIDs->ID.at(J);
		if(Config.FindProcessClass(ProcessClassID)	==	NULL)
			continue;
		CCfgGroupProcessClass *GroupProcessClass	=	FindProcessClass(ProcessClassID);
		if(GroupProcessClass	==	NULL)
		{
			GroupProcessClass	=	new	CCfgGroupProcessClass();
			GroupProcessClass->m_ProcessClassID	=	ProcessClassID;
			GroupProcessClass->SetAction(CCfgItem::AddItemAction);
			m_ProcessClasses[ProcessClassID]	=	GroupProcessClass;
		}	else
		{
			GroupProcessClass->SetAction(CCfgItem::UpdateItemAction);
		}
	}
}

CCfgGroupProcessClass * CCfgGroup::FindProcessClass(int32_t ProcessClassID)
{
	std::map<int32_t,CCfgGroupProcessClass	*>::iterator	I	=	m_ProcessClasses.find(ProcessClassID);
	if(I	==	m_ProcessClasses.end())
		return	NULL;
	return	I->second;
}

void CCfgGroup::AddProcessClass(int32_t ProcessClassID)
{
	CCfgGroupProcessClass *GroupProcessClass	=	FindProcessClass(ProcessClassID);
	if(GroupProcessClass	!=	NULL)
		return;
	GroupProcessClass	=	new	CCfgGroupProcessClass();
	GroupProcessClass->m_ProcessClassID	=	ProcessClassID;
	m_ProcessClasses[ProcessClassID]	=	GroupProcessClass;

}

bool CCfgGroup::StartProcesses(CTpmApp	*App,bool	bResetShutdown,bool	bIgnoreStartDelay)
{
	bool	RetVal	=	false;
	if(m_ProcessClasses.empty())
		return	false;
	CTpmGroup	*TpmGroup	=	App->FindGroup(m_GroupID);
	if(!bResetShutdown)
	{
		if(TpmGroup->ControlStatus()	==	MultiXTpm__ProcessControlStatus__Shutdown)
			return	false;
	}	else
	{
		if(TpmGroup->ControlStatus()	==	MultiXTpm__ProcessControlStatus__Shutdown)
			TpmGroup->ControlStatus()	=	MultiXTpm__ProcessControlStatus__Normal;
	}
	for(TCfgGroupProcessClasses::iterator	I	=	m_ProcessClasses.begin();I!=m_ProcessClasses.end();I++)
	{
		if(I->second->GetAction()	!=	CCfgItem::DeleteItemAction)
		{
			CCfgProcessClass	*ProcessClass	=	App->Config().FindProcessClass(I->first);
			if(ProcessClass->GetAction()	!=	CCfgItem::DeleteItemAction)
			{
				if(bResetShutdown)
				{
					for(CTpmProcess	*Process	=	(CTpmProcess	*)App->GetFirstProcess();Process;Process	=	(CTpmProcess	*)Process->ID().Next())
					{
						if(Process->CfgProcessClass()->m_ProcessClassID	==	ProcessClass->m_ProcessClassID)
							if(Process->ControlStatus()	==	MultiXTpm__ProcessControlStatus__Shutdown)
								Process->ControlStatus()	=	MultiXTpm__ProcessControlStatus__Normal;
					}
				}
				if(!ProcessClass->m_bAutoStart)
				{
					for(int	I=0;I	<	ProcessClass->m_MinInstances;I++)
					{
						if(!App->FindProcess(App->GenerateProcID(ProcessClass->m_ProcessClassID,I)))
						{
							App->AddCfgProcessClass(*ProcessClass,I);
						}
					}
				}	else
				{
					if(ProcessClass->InstancesCount()	<	(size_t)ProcessClass->m_MinInstances)
						if(App->StartNewProcessInstance(ProcessClass,bIgnoreStartDelay))
							RetVal	=	true;
				}
			}
		}
	}
	return	RetVal;
}
bool	CCfgGroup::StartNewProcessInstance(CTpmApp	*App,bool	bIgnoreStartDelay)
{
	bool	RetVal	=	false;
	if(m_ProcessClasses.empty())
		return	false;
	if(GetAction()	==	CCfgItem::DeleteItemAction)
		return	false;
	for(TCfgGroupProcessClasses::iterator	I	=	m_ProcessClasses.begin();I!=m_ProcessClasses.end();I++)
	{
		if(I->second->GetAction()	!=	CCfgItem::DeleteItemAction)
		{
			CCfgProcessClass	*ProcessClass	=	App->Config().FindProcessClass(I->first);
			if(ProcessClass->GetAction()	!=	CCfgItem::DeleteItemAction)
			{
				if(App->StartNewProcessInstance(ProcessClass,false))
					RetVal	=	true;
			}
		}
	}
	return	RetVal;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -