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(§ions->uuid); create_f8_uuid(§ions->h.uuid); create_resource(§ions->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; }
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; }
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; }