Ejemplo n.º 1
0
	void NEUROBITOBJ::load_devctx(void)
	{
		char szFileName[256];
		char *extension;

		strcpy(szFileName,GLOBAL.configfile);
		if (extension = strstr(szFileName, ".con"))
			strcpy(extension,".nb");
		else strcat(szFileName,".nb");

		write_logfile("loading Neurobit device context from %s",szFileName);

		GLOBAL.neurobit_available=0;
		if (DevCtx>=0) NdCloseDevContext(DevCtx);
		DevCtx=ReadCfgFile(szFileName);
		if (DevCtx<0) {
			report_error ("Could not load Neurobit Config File - using default configuration");
			DevCtx=NdOpenDevContext(device);
		}
		strcpy(device,NdGetDevName());
		GLOBAL.neurobit_available=1;

		InvalidateRect(hDlg,NULL,FALSE);
		update_channelinfo();
		SetDlgItemText(hDlg,IDC_NB_DEVICECOMBO,device);
	}
Ejemplo n.º 2
0
int CMainCtrl::Run()
{
	while(1)
	{
		if(Flag_Exit == m_iRunFlag)
		{
			TLib_Log_LogMsg("Server Exit!\n");
			return 0;
		}
		
		if(Flag_ReloadCfg == m_iRunFlag)
		{
			ReadCfgFile(m_stConfig.m_szCfgFileName);
			TLib_Log_LogMsg("reload config file ok!\n");
			m_iRunFlag = 0;
		}

		// 1ms
		if(m_Svr2MePipe.GetCodeLength() == 0)
			m_stEPollFlow.Wait(1);
		else
			m_stEPollFlow.Wait(0);		

		//每次循环取一次
		gettimeofday(&m_tNow,NULL);
		
		//读取客户端包
		CheckClientMessage();    
		
		//读取服务器端包
		CheckSvrMessage(); 

		//检测通讯超时
		CheckTimeOut();    

		//写统计
		WriteStat();
	}
	
	return 0;
}
Ejemplo n.º 3
0
void Worker::Initialize()
{
    ReadCfgFile();
    OpenComm();
}
Ejemplo n.º 4
0
int CMainCtrl::Initialize(char* pProName,char* pConfigFile)
{
	//读配置
	strcpy(m_stConfig.m_szSvrName,pProName);
	int iRet = ReadCfgFile(pConfigFile);
	if( 0 != iRet )
	{
		return iRet;
	}

	//连接资源限制,root用户下有效
	rlimit rlim;
	rlim.rlim_cur = m_stConfig.MAX_SOCKET_NUM+10240;
	rlim.rlim_max = m_stConfig.MAX_SOCKET_NUM+10240;
	setrlimit(RLIMIT_NOFILE, &rlim);	

	//bind cpu
	if(m_stConfig.m_iBindCpu >= 0)
	{
		cpu_set_t mask;
		int iCpuId = m_stConfig.m_iBindCpu;
		printf("set cpu affinity %d.\n",iCpuId);
		
		CPU_ZERO(&mask);
		CPU_SET(iCpuId, &mask);
		sched_setaffinity(0, sizeof(mask), &mask);
	}
	
	//读so
	void* pHandle = dlopen(m_stConfig.m_szNetCompleteSo, RTLD_LAZY);
	if (!pHandle)
	{
		printf("open %s failed!\n",m_stConfig.m_szNetCompleteSo);
		printf("use ccs/src/make -f makefile.complete to make these so,and choose the one you want.\n");
		return -1;
	}	
	dlerror();  	//Clear any existing error 
	net_complete_func = (check_complete)dlsym(pHandle, "net_complete_func");
	if (dlerror() != NULL)
	{
		printf("get net_complete_func from %s failed!\n",m_stConfig.m_szNetCompleteSo);
		return -1;
	}
	msg_header_len_func = (msg_header_len)dlsym(pHandle, "msg_header_len");
	if (dlerror() != NULL)
	{
		printf("get msg_header_len from %s failed!\n",m_stConfig.m_szNetCompleteSo);
		return -1;
	}
	m_iMsgHeaderLen = msg_header_len_func();

	//初始化epoll端口
	if(m_stEPollFlow.Create(m_stConfig.MAX_SOCKET_NUM))
	{
		printf("epoll create error!");
		return -1;
	}

	//创建管道
	if(CCodeQueue::CreateMQByFile(m_stConfig.m_szMeToSvrMQ,&m_Me2SvrPipe))
	{
		printf("CreateCodeMQ %s failed!\n",m_stConfig.m_szMeToSvrMQ);
		return -1;	
	}
	
	if(CCodeQueue::CreateMQByFile(m_stConfig.m_szSvrToMeMQ,&m_Svr2MePipe))
	{
		printf("CreateCodeMQ %s failed!\n",m_stConfig.m_szSvrToMeMQ);
		return -1;	
	}
	long long ullMemCost = 0;
	
	//创建CS消息缓冲区
	int iMemSize = TIdxObjMng::CountMemSize(m_stConfig.RCV_BLOCK_SIZE,m_stConfig.RCV_BLOCK_NUM,1);
	char* pMem = new char[iMemSize];
	m_stIdxObjMngRecv.AttachMem(pMem,iMemSize,m_stConfig.RCV_BLOCK_SIZE,m_stConfig.RCV_BLOCK_NUM,emInit,1);
	ullMemCost += (long long)iMemSize;

	iMemSize = CBuffMng::CountMemSize(m_stConfig.MAX_SOCKET_NUM);
	pMem = new char[iMemSize];	
	m_stBuffMngRecv.AttachMem(pMem,iMemSize,m_stConfig.MAX_SOCKET_NUM);
	ullMemCost += (long long)iMemSize;

	m_stBuffMngRecv.AttachIdxObjMng(&m_stIdxObjMngRecv);
	
	//创建SC消息缓冲区
	iMemSize = TIdxObjMng::CountMemSize(m_stConfig.SND_BLOCK_SIZE,m_stConfig.SND_BLOCK_NUM,1);
	pMem = new char[iMemSize];
	m_stIdxObjMngSend.AttachMem(pMem,iMemSize,m_stConfig.SND_BLOCK_SIZE,m_stConfig.SND_BLOCK_NUM,emInit,1);
	ullMemCost += (long long)iMemSize;

	iMemSize = CBuffMng::CountMemSize(m_stConfig.MAX_SOCKET_NUM);
	pMem = new char[iMemSize];	
	m_stBuffMngSend.AttachMem(pMem,iMemSize,m_stConfig.MAX_SOCKET_NUM);
	ullMemCost += (long long)iMemSize;

	m_stBuffMngSend.AttachIdxObjMng(&m_stIdxObjMngSend);

	//创建socket管理区
	iMemSize = TIdxObjMng::CountMemSize(sizeof(TSocketNode),m_stConfig.MAX_SOCKET_NUM,1);
	pMem = new char[iMemSize];
	m_stSocketNodeMng.AttachMem(pMem,iMemSize,sizeof(TSocketNode),m_stConfig.MAX_SOCKET_NUM,emInit,1);
	ullMemCost += (long long)iMemSize;

	iMemSize = CHashTab::CountMemSize(m_stConfig.MAX_SOCKET_NUM);
	pMem = new char[iMemSize];
	m_stSocketNodeHash.AttachMem(pMem, iMemSize,m_stConfig.MAX_SOCKET_NUM);
	ullMemCost += (long long)iMemSize;

	m_stSocketNodeHash.AttachIdxObjMng(&m_stSocketNodeMng,SetSocketNodeKey,GetSocketNodeKey);

	//内存管道监听
	if (m_Svr2MePipe.GetReadNotifyFD() >= 0)
	{
		iRet = CreateSocketNode(m_Svr2MePipe.GetReadNotifyFD(),TSocketNode::STATUS_OK,
							0,0,"_PIPE_",TSocketNode::PIPE_SOCKET);
		if(iRet < 0)
		{
			printf("CreateSocketNode Failed!iRet=%d\n",iRet);
			return iRet;
		}		
	}

	//管理端口
	if(m_stConfig.m_iAdminPort > 0)
	{
		unsigned short usListenPort = (unsigned short)m_stConfig.m_iAdminPort;
		unsigned int unListenIP = inet_addr(m_stConfig.m_szAdminIp);
		
		int iListenSocket = CreateListenSocket(unListenIP,usListenPort,
					m_stConfig.SOCKET_RCVBUF,m_stConfig.SOCKET_SNDBUF);
		if (iListenSocket < 0)
		{
			printf("CreateListenSocket %u:%u failed!\n",unListenIP,usListenPort);
			TLib_Log_LogMsg("CreateListenSocket %u:%u failed!\n",unListenIP,usListenPort);
			return -2;		
		}
		
		//加入监听数组
		int iNewSuffix = CreateSocketNode(iListenSocket,TSocketNode::STATUS_OK,
						unListenIP,usListenPort,"_ADMIN_",TSocketNode::ADMIN_LISTEN_SOCKET);
		if (iNewSuffix < 0)
		{
			close(iListenSocket);		
			printf("add to socket array failed!\n");
			TLib_Log_LogMsg("add to socket array failed!\n");
			return -3;
		}		

		printf("Admin Listen on %s:%u Success!\n", m_stConfig.m_szAdminIp, m_stConfig.m_iAdminPort);		
	}

	printf("%s Cost Mem %llu bytes.\n",SVR_NAME,ullMemCost);
	TLib_Log_LogMsg("Cost Mem %llu bytes.\n",ullMemCost);	
	printf("Server Init Success!\n");
	TLib_Log_LogMsg("Server Init Success!\n");
	return 0;
}