📄 comserver.cpp
字号:
// ComServer.cpp : Implementation of WinMain
// Note: Proxy/Stub Information
// To build a separate proxy/stub DLL,
// run nmake -f ComServerps.mk in the project directory.
#include "stdafx.h"
#include "resource.h"
#include <initguid.h>
#include "ComServer.h"
#include "ComServer_i.c"
#include "Server1.h"
#include "Server2.h"
#include "Server3.h"
#include "hotuse.h"
#include "capid.h"
#include "rjremote.h"
#include "netweb.h"
#include "reg.h"
//#include "reg.h"
//#include "testinterface.h"
const DWORD dwTimeOut = 5000; // time for EXE to be idle before shutting down
const DWORD dwPause = 1000; // time to wait for threads to finish up
Alarm alarmrecord;
alarmold alarmoldrecord;
errorx errorrecord;
errorold erroroldrecord;
system_struction Files;
station_exd st_exd;
all_INI st_ini[255];
Kjsys001 File1;
point_type_struct File2;
sensor_unit_struct File3;
kjsys004 File4;
kjsys005 File5;
station_port_struct File6;
system_station_cfg0 Cfg0;
system_station_cfg1 Cfg1;
system_station_cfg2 Cfg2;
system_station_cfg3 Cfg3;
system_station_cfg4 Cfg4;
all_xinxi station_xinxi[255];
nowdata Timedata;
int minute_flg;//2分钟写库标志,由数据库进程置TRUE。数据处理进程清FALSE
int hour_flg;//1小时写库标志,由数据库进程置TRUE。数据处理进程清FALSE
yddd1 yddds;
long kckzt[255]; //: 开出控制口 :word
int copy_flag; //拷贝标志
qydd station_qydd;
translate Translate[8];
Station stations[8];
int kckz[255];
Console0out console0out;
Console1out console1out;
Console1out ctrout[20];
S_buf sendbuf[8][10];
station_info stinfo;
HANDLE hf;
int fix_stno;
unsigned char ordbuf[300];
unsigned char recvbuf[300];
BOOL resendflag;
BOOL fz_ini_req;
byte rjAlarmState[255]; //人员分站的当前报警状态: 1报警,0非报警
// opcsrvdef opcsrv[3];
del_sensor delflg;
BOOL con_del;//测点删除标志,由测点删除客户进程设置TRUE,数据处理进程清FALSE
BOOL dat_del;//数据处理进程设置TRUE,通知数据库进程删除测定表
// station_info stationinfo[8];
kttp ktp;
kai_chuSBpz KAI_CHUSBpz; //贺增加 2005-4-15
short passtmct; //网络用超时人数
Now_kckh kch[500]; //开出口状态
short reset_num[255]; //复电次数
kgbh kgch;
long counter0=0;
long counter1=0;
tracetj trctjb[1000];
tracetj trclst[1000];
//------by QuanGuo 05-3-1-----//
fieldlist fieldtj[200];
fieldlist fieldtjb[200];
short fieldlistct;
short fieldlist_ct;
rjalarmlist rjalarmtj[200];
rjalarmlist rjalarmtjb[200];
short rjalarmct;
short rjalarm_ct;
//-----------------------------//
Rstations rtinfo;
preflist prst;
managerlist manager;
addrlist adlst;
//05-4-17 add Begin
short staTrouble;
short staRecvNull[255];
//05-4-17 add End
personlist perstmb[4096];
//DATE rstm[255];
short addrperson[50];
short rj_ct;
// short tmgate1;
// short tmgate2;
DWORD yddd_time_flag[255];
//int yddd_flag1[255][16];
int send_flag[255];
int yddd_flag[255];
int traceNum;
int trace_notice;
BOOL trac_flg;
unsigned char Curpath[50];
unsigned char otherpcname[33];
int load_flg;
BOOL tmok;
short lastime[3];
//lastinfo last[255];
BOOL comsertype; //0: 辅机,1:主机
BOOL tranflg;
DDDJ_STRUC dddj;
DDBJ_STRUC ddbj;
float Alarm_Avge[500];
float Alarm_Flag[ 500 ];
BOOL scanflg;
tjupdow uptj[200];
tjupdow uptjb[200];
short upct;
short up_ct;
tracetj almtj[500];
tracetj almtjb[500];
short almct;
short alm_ct;
tracetj net_trace[2000];
short net_trc_ct;
tracetj net_alarm[1000];
short net_alm_ct;
tjupdow net_uptj[400];
short net_uptj_ct;
short chkup[200];
short chkct;
drivePT devpoint;
BOOL demosys;
int democount;
HANDLE termhd;
//long dtbufptr;
//unsigned char infobuf[32768];
// Passed to CreateThread to monitor the shutdown event
static DWORD WINAPI MonitorProc(void* pv)
{
CExeModule* p = (CExeModule*)pv;
p->MonitorShutdown();
return 0;
}
LONG CExeModule::Unlock()
{
LONG l = CComModule::Unlock();
if (l == 0)
{
bActivity = true;
SetEvent(hEventShutdown); // tell monitor that we transitioned to zero
}
return l;
}
//Monitors the shutdown event
void CExeModule::MonitorShutdown()
{
while (1)
{
WaitForSingleObject(hEventShutdown, INFINITE);
DWORD dwWait=0;
do
{
bActivity = false;
dwWait = WaitForSingleObject(hEventShutdown, dwTimeOut);
} while (dwWait == WAIT_OBJECT_0);
// timed out
if (!bActivity && m_nLockCnt == 0) // if no activity let's really bail
{
#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
CoSuspendClassObjects();
if (!bActivity && m_nLockCnt == 0)
#endif
break;
}
}
CloseHandle(hEventShutdown);
PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
}
bool CExeModule::StartMonitor()
{
hEventShutdown = CreateEvent(NULL, false, false, NULL);
if (hEventShutdown == NULL)
return false;
DWORD dwThreadID;
HANDLE h = CreateThread(NULL, 0, MonitorProc, this, 0, &dwThreadID);
return (h != NULL);
}
CExeModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_Server1, Server1)
OBJECT_ENTRY(CLSID_Server2, Server2)
OBJECT_ENTRY(CLSID_Server3, Server3)
//OBJECT_ENTRY(CLSID_testinterface, Ctestinterface)
OBJECT_ENTRY(CLSID_personproc, Cpersonproc)
OBJECT_ENTRY(CLSID_rjinteface, Crjinteface)
OBJECT_ENTRY(CLSID_opcinteface, Copcinteface)
OBJECT_ENTRY(CLSID_hotuse, Chotuse)
OBJECT_ENTRY(CLSID_capid, Ccapid)
OBJECT_ENTRY(CLSID_rjremote, Crjremote)
OBJECT_ENTRY(CLSID_netweb, Cnetweb)
//OBJECT_ENTRY(CLSID_reg, Creg)
OBJECT_ENTRY(CLSID_reg, Creg)
END_OBJECT_MAP()
LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2)
{
while (p1 != NULL && *p1 != NULL)
{
LPCTSTR p = p2;
while (p != NULL && *p != NULL)
{
if (*p1 == *p)
return CharNext(p1);
p = CharNext(p);
}
p1 = CharNext(p1);
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
//
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
#else
HRESULT hRes = CoInitialize(NULL);
#endif
_ASSERTE(SUCCEEDED(hRes));
_Module.Init(ObjectMap, hInstance, &LIBID_COMSERVERLib);
_Module.dwThreadID = GetCurrentThreadId();
TCHAR szTokens[] = _T("-/");
int nRet = 0;
BOOL bRun = TRUE;
LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens);
while (lpszToken != NULL)
{
if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
{
_Module.UpdateRegistryFromResource(IDR_ComServer, FALSE);
nRet = _Module.UnregisterServer(TRUE);
bRun = FALSE;
break;
}
if (lstrcmpi(lpszToken, _T("RegServer"))==0)
{
_Module.UpdateRegistryFromResource(IDR_ComServer, TRUE);
nRet = _Module.RegisterServer(TRUE);
bRun = FALSE;
break;
}
lpszToken = FindOneOf(lpszToken, szTokens);
}
if (bRun)
{
_Module.StartMonitor();
#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED);
_ASSERTE(SUCCEEDED(hRes));
hRes = CoResumeClassObjects();
#else
hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE);
#endif
_ASSERTE(SUCCEEDED(hRes));
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
DispatchMessage(&msg);
_Module.RevokeClassObjects();
Sleep(dwPause); //wait for any threads to finish
}
_Module.Term();
CoUninitialize();
return nRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -