Example #1
0
KPROXY_API f8_bool kproxy_init(int leakDetect)
{
	ITcpAdapter *a;	

	_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
	_CrtSetBreakAlloc(leakDetect);
	
	/* initialize and start kernel */
	ex_init();
	
	/* KERN_F_ENABLE_INPUT */

	x_buffer = (char *)__malloc__(LARGE_BUF_SIZE);
	x_buf_len = LARGE_BUF_SIZE;
	b_ShellExit = __false;	

	__new__(ITcpAdapter, a);
	proxy_adapter = __ucast__(ITcpAdapter, IKAdapter, a);

	sections = ke_get_blk(proxy_adapter->kernel, 0);
	assert(sections->uuid == BLK_ID_ROOT);

	create_resource(&sections->uuid);
	create_f8_uuid(&sections->h.uuid);
	create_resource(&sections->h.uuid);

	memset(fileName, 0 , sizeof(fileName));

	g_shell = shell_create(commands);
	
	reset_reg_map();
	init_blklib();
	init_clipboard();

	g_bDirty = __false;


	init_network(RTK_INIT_AS_SERVER, 0);
	vbus = connect_vbus(0xf8, VBUS_CONNECT_AS_SERVER, sr, 0);
	
	return __true;
}
Example #2
0
PROXY_API __bool PMC_API init_proxy(HWND hWnd, __uint flags)
{
	char * szWarning = "没有找到软件狗,进入演示状态,数据库最大规模32点";

	if(!_g_InitLock){
		_g_InitLock = new CLock;
	}
	
	g_InitLock.Lock();
	if(g_iInitCount){
		g_iInitCount++;
		g_InitLock.UnLock();
		return __true;
	}

	g_iInitCount++;

	g_iInitFlag = flags;
	
	_load_settings(__false);
	
	g_DBDispatchTable.OnAddNode = _on_add_node;
	g_DBDispatchTable.OnDropNode = _on_del_node;
	hook_rtdb_events(&g_DBDispatchTable);
	
	if(!(g_iInitFlag & PROXY_INIT_AS_SERVER)){
		unsigned char run, dev;
		int runLevel, devLevel;
		init_key();
		get_key(&run, &runLevel, &dev, &devLevel);
		if(!dev){
			/* no dog is attached*/
			/* create_group(0x12345678,xxx) is a loophole */
			create_group((RTK_CURSOR)0x12345678, (PRTK_GROUP)32);
			if(!(flags & PROXY_SILENT)){
				MessageBox(
					hWnd,
					szWarning,
					"PMC Error",
					MB_OK
					);
			}
		}else{
			/* yes, dog is attached, set database limit */
			create_group((RTK_CURSOR)0x12345678, (PRTK_GROUP)devLevel);
		}
	}
	init_powermgr();
	init_network(0);
	init_rtdb();
	connect_vbus(BUSID_RTDB, 0, _on_rtdb, default_client_filter);
	connect_vbus(BUSID_CONFIG, 0, _on_config, default_client_filter);
	connect_vbus(BUSID_ALARM, 0, _on_alarm, default_client_filter);
	connect_vbus(BUSID_SYSTEM, 0, _on_system, default_client_filter);
	connect_vbus(BUSID_OPERATION, 0, 0, default_client_filter);
	if(flags & PROXY_ENABLE_DISPATCHER){
		start_dispatcher();
	}	

	g_Worker = new CProxyWorker(flags);
	if(!g_Worker){
		g_InitLock.UnLock();
		return __false;		
	}
	g_Worker->start();

#if defined(_WIN32) && 1
	SetThreadPriority(g_Worker->handle(), THREAD_PRIORITY_BELOW_NORMAL);
#endif
		
	g_InitLock.UnLock();
	return __true;
}
Example #3
0
bool CRtkService::_init()
{
	char serverName[rtkm_node_key_length + 1];

	m_bPending = __true;
	
	PrimaryCheckInterval = GetPrivateProfileInt(
		"PMC",
		"PrimaryCheckInterval",
		500,
		get_config_file()
		);
	if(PrimaryCheckInterval < 50 || PrimaryCheckInterval > 5000){
		utils_error(
			"Warning : PrimaryCheckInterval=%d is invalid, reset to 500.\n",
			PrimaryCheckInterval
			);
		PrimaryCheckInterval = 500;
	}
	MaxPrimaryWatchDogCounter = GetPrivateProfileInt(
		"PMC",
		"PrimaryWatchDogCounter",
		8,
		get_config_file()
		);
	if(MaxPrimaryWatchDogCounter < 3 || MaxPrimaryWatchDogCounter > 50){
		utils_error(
			"Warning : PrimaryWatchDogCounter=%d is invalid, reset to 20.\n",
			PrimaryWatchDogCounter
			);
		MaxPrimaryWatchDogCounter = 8;
	}
	PrimaryWatchDogCounter = MaxPrimaryWatchDogCounter;
	
	m_bPending = __false;

	init_powermgr();

#ifdef _WIN32
	init_spac();//初始化得到security descriptor、mutex对象句柄数组mutics[]和event对象句柄数组events[]
#endif
	
	init_server_shell();//创建g_shell

	init_config();//空函数。。。
	
	GetPrivateProfileString(
		"PMC",
		"ServerName",
		"",
		serverName,
		sizeof(serverName),
		get_config_file()
		);
	//若pmc.ini中没有给出节点名,取本机名为节点名
	if(!serverName[0]){
		DWORD len;
		len = sizeof(serverName);
		GetComputerName(serverName, &len);
	}
	
	//初始化网络,即设定一些值,创建链表g_buses,<bus_id, CRtkVBus*>,并开启5个VBUS线程
	if(!init_network(RTK_INIT_AS_SERVER, serverName)){
		return false;
	}
	//给g_buses中的4个元素的CRtkVBus的成员赋值
	connect_vbus(
		BUSID_RTDB, 
		VBUS_CONNECT_AS_SERVER, 
		on_rtdb, 
		rtdb_filter
		);
	connect_vbus(
		BUSID_SYSTEM, 
		VBUS_CONNECT_AS_SERVER, 
		on_system, 
		server_filter
		);
	connect_vbus(
		BUSID_OPERATION, 
		VBUS_CONNECT_AS_SERVER, 
		on_operation, 
		server_filter
		);
	connect_vbus(
		BUSID_CONFIG, 
		VBUS_CONNECT_AS_SERVER, 
		on_config, 
		server_filter
		);
	utils_trace("Networking Subsystem initialized.\n"); 	

	register_power_callback(power_state_changed, 0);//创建一个CALLBACK_ITEM,用形参给其成员赋值,并链接上RTK_LIST_ENTRY
	// checking primary site
	if(!setup_running_state()){
		return false;
	}	

	setup_rtdb();//在pmc.ini中寻找组名,加载组名对应的*.csv文件中的标签到内存,并开启一个线程。
	utils_trace("Realtime Database Subsystem initialized.\n");
	init_ioss();
	utils_trace("IO Susbsystem initialized.\n");	

	utils_trace("%s started...\n",  versionString.c_str());

	if(get_power_state() == PWR_RUNNING){
		online_broadcast();//发送一个报警数据包,RTK_ALARM_PACKET型
	}

	return true;
}