Exemple #1
0
//Init Output
int AdControl::OutputInit(int iPort)
{
	int ret;
	if(iPort > 0)
		m_iPort = iPort;
	
	//Get System path
	char path[AD_BYTE512];
	getcwd(path,AD_BYTE512);
	m_sProjectPath = path;
	
	//init net module
	cout<<"***********Output Server Init**************\n"<<endl;
	ret = m_ctServer.AdServerInit(m_iPort, 1, 0);
	if(ret != AD_SUCCESS)
	{
		AD_ERROR("AdServer init error\n");
		return ret;
	}
	
	//create net (server,  work,  write) task
	ret = AdControlNetCreateTask( static_cast<AdNetBase *>(&m_ctServer), 
			static_cast<AdNetTaskInterface*>(this), 1, 0);
	if(ret != AD_SUCCESS)
	{
		AD_ERROR("AdServer Create error\n");
		return ret;
	}
	return AD_SUCCESS;
}
int AdCharge::ChargeInit(const AdRtbConfig & ctConfig, map<UINT, AdTask *> & TaskList)
{
	int ret;

	//get charge server info
	string sSec = "[ChargeServer]";
	ADCONFIG & server = ctConfig.Get(sSec);
	ADCONFIG_ITER iterConf;

	//init client session
	if(m_ltServer.empty())
	{
		//init clients
		ret = m_ctClients.AdClientInit(m_ltServer, 1, 0);
		if(ret != AD_SUCCESS)
		{
			AD_ERROR("AdClient init error\n");
			return ret;
		}

		//create net (server,  work) task
		ret = AdControlNetCreateTask(static_cast<AdNetBase *>(&m_ctClients),
			static_cast<AdNetTaskInterface *>(this), 1, 0);
		if(ret != AD_SUCCESS)
		{
			AD_ERROR("AdServer Create error\n");
			return ret;
		}	
	}
	else
	{
		//clear old server and session
		list<string>::iterator iterList;
		for(iterList = m_ltServer.begin(); iterList != m_ltServer.end(); iterList ++)
		{
			m_ctClients.AdClientDelSession(*iterList);
		}
		m_ltServer.clear();
	}

	//create session
	for(iterConf = server.begin(); iterConf != server.end(); iterConf ++)
	{
		m_ltServer.push_back(iterConf->second);
		ret = m_ctClients.AdClientCreateSession(iterConf->second);
		if(ret != AD_SUCCESS)
		{
			AD_ERROR("AdClient Create Session  error\n");
		} 
	}

	return AD_SUCCESS;
}
AdConHash::AdConHash()
{
	m_pHandle = NULL;
	int ret = pthread_rwlock_init(&m_pLock, NULL);
	if(ret != AD_SUCCESS)
	{
		AD_ERROR("rwLock init  error\n");
	}
}
int  SharedLibInit(AdProtocolBase *  & ctpPro)
{
	AdProtocolGdt *  pPro = new AdProtocolGdt;
	if(pPro == NULL)
	{
		AD_ERROR("Mem not enough\n");
		return AD_FAILURE;
	}
	ctpPro = static_cast<AdProtocolBase *>(pPro);
	return AD_SUCCESS;
}
Exemple #5
0
void AdControl::TaskDetect(int iSecond)
{
	map<UINT, AdTask *>::iterator  iter;
	map<UINT, UINT> mLastCounter;
	while(running)
	{
		Time::wait(iSecond);
		for(iter = m_mTasks.begin(); iter != m_mTasks.end(); iter ++)
		{
			if(iter->second->m_uiLoop == mLastCounter[iter->first])
			{
				if(!iter->second->TaskWaitting())
					iter->second->create();
			}
			else
			{
				mLastCounter[iter->first] = iter->second->m_uiLoop;
			}
			
			if(iter->second->m_bTaskRun == false)
			{
				AD_ERROR("Server error , task 0x%x exit\n", iter->second->m_uiTaskId);
				goto EXIT;
			}
		}
	}

EXIT:
	for(iter = m_mTasks.begin(); iter != m_mTasks.end(); iter ++)
	{
		iter->second->destroy();
	}

	Time::wait(1);

	for(iter = m_mTasks.begin(); iter != m_mTasks.end(); iter ++)
	{
		delete iter->second;
	}
}
int AdRedisCli::AdRedisConnect()
{
	m_pGtCli = redisConnect(m_sIp.c_str(), m_iPort);
	if(m_pGtCli == NULL || m_pGtCli->err)
	{
		AdRedisClose();
		return AD_FAILURE;
	}
	if(m_sPasswd.size()> 0)
	{
		redisReply *reply;
		reply = (redisReply *)redisCommand(m_pGtCli, "AUTH %s", m_sPasswd.c_str());
		if (reply->type == REDIS_REPLY_ERROR) {
			/* Authentication failed */
			AD_ERROR("Redis Authentication failed");
			freeReplyObject(reply);
			return AD_FAILURE;
		}
		freeReplyObject(reply);
	}
	return AD_SUCCESS;
}
Exemple #7
0
//Output Server
int AdControl::Run(AdCache * pCache, AdSession * pSession, AdTask & ctTask)
{
	int ret;
	int iLen;
	
	map<UINT, AdTask *>::iterator iter;
	AdTask * pTask = static_cast<AdTask *>(pSession->AdSessionGetPrivate());

	if(pCache != NULL) 
	{
		pSession->AdSessionSetTimeout(100);
		//get command info, parse it
		if(pCache->Size()== sizeof(AdDebug))
		{
			struct AdDebug * pDebug = (struct AdDebug *)pCache->Get();
			switch(pDebug->uiType)
			{
				case AD_DEBUG_PRINT_REALTIME:
					break;
				case AD_DEBUG_PRINT_PROCESS:
					iter = m_mTasks.find(pDebug->uiThread);
					if(iter != m_mTasks.end())
					{
						iter->second->m_uiPrint = pDebug->uiData;
						pSession->AdSessionSetPrivate(static_cast<void *>(iter->second));
					}
					break;
				case AD_DEBUG_PRINT_INFO:
				default:
					AD_PRINT("Ad Rtb System Info(%s):\n", m_sProjectPath.c_str());
					for(iter = m_mTasks.begin(); iter != m_mTasks.end(); iter ++)
					{
						AD_PRINT("%02d  : %s( 0x%x & 0x%x)\n", iter->first,iter->second->m_sDescription.c_str(),
							iter->second->m_uiTaskId, iter->second->getPrivateId());
						iter->second->TaskPrintState();
					}
					break;
			}
		}
	}

	if(!pSession->AdSessionOk())
	{
		if(pTask != NULL)
		{
			pTask->m_uiPrint = 0;
			pSession->AdSessionGetPrivate(true);
			pSession->AdSessionSetTimeout(0);
		}
	}
	else
	{
		const char *pSend = m_ctCache.GetRead(&iLen);
		if(pSend != NULL)
		{
			ret = pSession->AdSessionWrite(pSend, iLen);
			if(ret == AD_FAILURE)
			{
				AD_ERROR("Msg Output Error\n");
			}
		}
	}

	ctTask.m_uiLoop++;
	return  AD_SUCCESS;
}