📄 server2.cpp
字号:
case 64:
for(k=4;k<Translate[0].bufsize-1;k++)
Translate[0].buf[k]=Translate[0].buf[k+1];
Translate[0].bufsize--;
for(k=4;k<9;k++)
buf[k]=buf[k+1];
n=ct/8;
break;
case 128:
for(k=14;k<Translate[0].bufsize-1;k++)
Translate[0].buf[k]=Translate[0].buf[k+1];
Translate[0].bufsize--;
for(k=9;k<Translate[0].bufsize-1;k++)
Translate[0].buf[k]=Translate[0].buf[k+1];
Translate[0].bufsize--;
for(k=4;k<Translate[0].bufsize-1;k++)
Translate[0].buf[k]=Translate[0].buf[k+1];
Translate[0].bufsize--;
for(k=14;k<19;k++)
buf[k]=buf[k+1];
for(k=9;k<19;k++)
buf[k]=buf[k+1];
for(k=4;k<19;k++)
buf[k]=buf[k+1];
n=ct/8;
break;
}
mlct=0;
for(k=0;k<n;k++)
{
bt=buf[k];
for(j=0;j<8;j++)
{
if((bt>>j)&1)
mlct++;
}
}
for(k=0;k<n;k++)
{
bt=Translate[0].buf[k];
for(j=0;(j<8)&&(j<ct);j++)
{
if((bt>>j)&1)
vl.iVal=1;
else
vl.iVal=0;
stations[0].vl[m]=vl;
m++;
}
}
mlct+=k;
// for(k=k;k<(2*mlct-2);k++)
for(k=k;k<Translate[0].bufsize-2;k++)
{
vl.iVal=Translate[0].buf[k+1]*256+Translate[0].buf[k];
stations[0].vl[m]=vl;
k++;
m++;
}
if(k<Translate[0].bufsize)
{
stations[0].kz=0*256+Translate[0].buf[k]; //he modi 2005-4-15 增加分站复位次数
reset_num[stations[0].stno]=Translate[0].buf[k+1];
if (reset_num[stations[0].stno]>0)
{
SYSTEMTIME now_time;
GetLocalTime(&now_time); // address of system time structure
DATE dt1=dateCal(now_time.wYear,now_time.wMonth,now_time.wDay,now_time.wHour,now_time.wMinute,now_time.wSecond);
ErrOldNum=ErrOldNum+1;
erroroldrecord.ErrorCun=ErrOldNum;
erroroldrecord.ErroroldRec[ErrOldNum-1].errorflag=3;
erroroldrecord.ErroroldRec[ErrOldNum-1].start_time=dt1;
erroroldrecord.ErroroldRec[ErrOldNum-1].error_type=reset_num[stations[0].stno];
erroroldrecord.ErroroldRec[ErrOldNum-1].addr_sensor=stations[0].stno;
erroroldrecord.ErroroldRec[ErrOldNum-1].end_time=dt1;
}
// stations[0].kz=Translate[0].buf[k+1]*256+Translate[0].buf[k]; //he modi 2005-4-15
}
stations[0].flag=1;
Translate[0].flag=0;
}
break;
default:
break;
}
return S_OK;
}
STDMETHODIMP Server2::iftransflag(int i,int *rb)
{
// TODO: Add your implementation code here
*rb=0;
if((Translate[i].flag)&&(File4.flag[Translate[i].stno]!=4))
*rb=1;
return S_OK;
}
STDMETHODIMP Server2::setflag(int i)
{
// TODO: Add your implementation code here
Translate[i].flag=0;
if(stations[i].flag) counter1++;
stations[i].flag=1;
return S_OK;
}
STDMETHODIMP Server2::ifprocess(int *rb)
{
// TODO: Add your implementation code here
*rb=0;
if((recvbuf[6]==0)&&(Translate[0].flag))
*rb=1;
return S_OK;
}
STDMETHODIMP Server2::ifconv(int i,int *rb)
{
// TODO: Add your implementation code here
*rb=0;
if(stations[i].flag) *rb=1;
return S_OK;
}
STDMETHODIMP Server2::ifrjst(int *rb)
{
// TODO: Add your implementation code here
// int i;
*rb=0;
if(ordbuf[1]==0) *rb=3;
if((File4.flag[ordbuf[0]]&0xc0)==0)
{
if((File4.flag[ordbuf[0]]&04)!=0)
{
if(ordbuf[1]==0)
*rb=1;
else
*rb=2;
}
}
return S_OK;
}
STDMETHODIMP Server2::setre7ord()
{
// TODO: Add your implementation code here
ordbuf[1]=7;
return S_OK;
}
LPWSTR Server2::wszFromSTR(LPCTSTR szSTR)
{
#ifdef _UNICODE
return (LPWSTR)szSTR;
#else
gwszTemp[0] = '\0';
if(szSTR == NULL) return gwszTemp;
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
szSTR, -1,
gwszTemp, MAX_PATH);
return gwszTemp;
#endif
}
void Server2::AnsiToUnicode(LPCSTR pszA, LPOLESTR* ppszW)
{
ULONG cCharacters;
DWORD dwError;
if (NULL == pszA)
{
*ppszW = NULL;
return ;
}
//分配ANSI stringByte 数量 2Byte
cCharacters = strlen(pszA)+1;
//申请内存
*ppszW = (LPOLESTR) CoTaskMemAlloc(cCharacters*2);
if ( *ppszW == NULL)
{
MessageBox(NULL,"内存溢出!","错误!",MB_OK);
return;
}
// 转换 to Unicode.
if (0 == MultiByteToWideChar(CP_ACP, 0, pszA, cCharacters,
*ppszW, cCharacters))
{
dwError = GetLastError();
CoTaskMemFree(*ppszW);
*ppszW = NULL;
}
}
void Server2::remote_read_File()
{
DWORD dwR;
char clsidString[_MAX_PATH];
char path[_MAX_PATH];
UUID clsid;
HRESULT hr;
HKEY hCLSID;
// short rb;
Irjremote *gpIrmt;
Server1::unsigned_To_signed(otherpcname,path);
HKEY hk = HKEY_CLASSES_ROOT;
dwR = RegConnectRegistry (path, HKEY_CLASSES_ROOT, &hk);
//dwR = RegConnectRegistry ("\\\\cari_soft", HKEY_CLASSES_ROOT, &hk);
dwR = RegOpenKey(hk, "comserver.rjremote.1", &hCLSID );
RegCloseKey(hk);
if( dwR != ERROR_SUCCESS )
return ;
LONG size=260;
dwR = RegQueryValue(hCLSID, "CLSID", clsidString, &size );
if( dwR != ERROR_SUCCESS )
return ;
hr = CLSIDFromString( wszFromSTR(clsidString), &clsid );
if( FAILED(hr))
return ;
COSERVERINFO si;
MULTI_QI qi;
/* Caution COSERVERINFO struct is different in VC++ 4.0 and VC++ 5.0*/
si.pAuthInfo = NULL;
LPOLESTR swName;
AnsiToUnicode(path,&swName);
si.pwszName = swName;
si.dwReserved1 = 0;
si.dwReserved2 = 0;
qi.pIID = &IID_Irjremote;
qi.pItf = NULL;
qi.hr = 0;
hr = CoCreateInstanceEx(clsid, NULL, CLSCTX_REMOTE_SERVER, &si, 1, &qi);
switch(hr)
{
case CO_S_NOTALLINTERFACES:
break;
case E_NOINTERFACE:
break;
case S_OK:
break;
case E_INVALIDARG:
break;
}
if (FAILED(hr))
{
//szMsg.Format(_T("CoCreateInstanceEx for %s : \n"),
// szServerName);
//CCrack::ShowErrorMessage(szMsg, hr);
return ;
}
if (FAILED(qi.hr))
{
//szMsg.Format(_T("Failed to connect to server %s : \n"),
// szServerName);
//CCrack::ShowErrorMessage(szMsg, hr);
return ;
}
gpIrmt = (Irjremote*) qi.pItf;
gpIrmt->freshconfg();
gpIrmt->Release();
gpIrmt=NULL;
}
void Server2::getremoteinfo()
{
DWORD dwR;
char clsidString[_MAX_PATH];
char path[_MAX_PATH];
UUID clsid;
HRESULT hr;
HKEY hCLSID;
// short rb;
int i;
Irjremote *gpIrmt;
Server1::unsigned_To_signed(otherpcname,path);
HKEY hk = HKEY_CLASSES_ROOT;
dwR = RegConnectRegistry (path, HKEY_CLASSES_ROOT, &hk);
//dwR = RegConnectRegistry ("\\\\cari_soft", HKEY_CLASSES_ROOT, &hk);
dwR = RegOpenKey(hk, "comserver.rjremote", &hCLSID );
//dwR = RegOpenKey(hk, "CIMPLICITY.HMI.OPCServer", &hCLSID );
RegCloseKey(hk);
if( dwR != ERROR_SUCCESS )
return ;
LONG size=260;
dwR = RegQueryValue(hCLSID, "CLSID", clsidString, &size );
if( dwR != ERROR_SUCCESS )
return ;
hr = CLSIDFromString( wszFromSTR(clsidString), &clsid );
if( FAILED(hr))
return ;
COSERVERINFO si;
MULTI_QI qi;
/* Caution COSERVERINFO struct is different in VC++ 4.0 and VC++ 5.0*/
si.pAuthInfo = NULL;
LPOLESTR swName;
AnsiToUnicode(path,&swName);
si.pwszName = swName;
si.dwReserved1 = 0;
si.dwReserved2 = 0;
qi.pIID = &IID_Irjremote;
qi.pItf = NULL;
qi.hr = 0;
hr = CoCreateInstanceEx(clsid, NULL, CLSCTX_REMOTE_SERVER, &si, 1, &qi);
switch(hr)
{
case CO_S_NOTALLINTERFACES:
break;
case E_NOINTERFACE:
break;
case S_OK:
break;
case E_INVALIDARG:
break;
}
if (FAILED(hr))
{
//szMsg.Format(_T("CoCreateInstanceEx for %s : \n"),
// szServerName);
//CCrack::ShowErrorMessage(szMsg, hr);
return ;
}
if (FAILED(qi.hr))
{
//szMsg.Format(_T("Failed to connect to server %s : \n"),
// szServerName);
//CCrack::ShowErrorMessage(szMsg, hr);
return ;
}
gpIrmt = (Irjremote*) qi.pItf;
gpIrmt->getrmt_ct(&rj_ct,&almct);
if(rj_ct>0)
{
short rfid[1000];
double dt[1000];
short rno[1000];
short addr[1000];
short wno[1000];
gpIrmt->getrmtrace(rfid,wno,dt,rno,addr);
for(i=0;i<rj_ct;i++)
{
trclst[i].personID=rfid[i];
trclst[i].dt=dt[i];
trclst[i].reno=rno[i]; //修改
trclst[i].addrno=addr[i];
trclst[i].workno=wno[i];
}
}
// almct=act;
if(almct>0)
{
short rfid[1000];
double dt[1000];
short rno[1000];
short addr[1000];
short wno[1000];
gpIrmt->getrtmalm(rfid,wno,dt,rno,addr);
for(i=0;i<almct;i++)
{
almtjb[i].personID=rfid[i];
almtjb[i].dt=dt[i];
almtjb[i].workno=wno[i]; //修改
almtjb[i].reno=rno[i];
almtjb[i].addrno=addr[i];
}
}
short adrn[4096];
double loctm[4096];
double entm[4096];
double extm[4096];
short dwrn[4096];
short uprn[4096];
short lastrn[4096];
short tag[4096];
gpIrmt->getrmtlocal(adrn,loctm,entm,extm,dwrn,uprn,lastrn,tag);
for(i=0;i<4096;i++)
{
perstmb[i].addrno=adrn[i];
perstmb[i].localtm=loctm[i];
perstmb[i].entrytm=entm[i];
perstmb[i].exittm=extm[i];
perstmb[i].dw_rno=dwrn[i];
perstmb[i].up_rno=uprn[i];
perstmb[i].lastreno=lastrn[i];
perstmb[i].tag=tag[i];
}
short wno[500];
short rfd[500];
double dwtm[500];
double uptm[500];
short dwr[500];
short upr[500];
short tg[500];
gpIrmt->getuptj(&upct,wno,rfd,dwtm,uptm,dwr,upr,tg);
for(i=0;i<upct;i++)
{
uptjb[i].workno=wno[i];
uptjb[i].personID=rfd[i];
uptjb[i].downdtm=dwtm[i];
uptjb[i].updtm=uptm[i];
uptjb[i].dw_rno=dwr[i];
uptjb[i].up_rno=upr[i];
uptjb[i].tag=tg[i];
}
gpIrmt->Release();
gpIrmt=NULL;
for(i=0;i<rj_ct;i++)
setdname(trclst[i].workno,trclst[i].name,trclst[i].depart);
for(i=0;i<almct;i++)
setdname(almtjb[i].workno,almtjb[i].name,almtjb[i].depart);
for(i=0;i<upct;i++)
setdname(uptjb[i].workno,uptjb[i].name,uptjb[i].depart);
// almb.count=act;
// for(i=0;i<act;i++)
// almb.alm[i]=atrc[i];
}
/////////////////////////////////////////////////////////////////////////////
// Copcinteface
/*STDMETHODIMP Copcinteface::setOPCdata(short stno, short dwCount, VARIANT *pvdt)
{
// TODO: Add your implementation code here
int i;
stations[1].stno=stno;
for(i=0;i<dwCount;i++)
stations[1].vl[i]=pvdt[i];
stations[1].kz=0;
stations[1].flag=1;
return S_OK;
}*/
STDMETHODIMP Copcinteface::setOPCdata(short stno, int dwCount,VARIANT *vdt)
//STDMETHODIMP Copcinteface::setOPCdata(short stno, int dwCount,int *vdt)
{
// TODO: Add your implementation code here
int i;
stations[1].stno=stno;
for(i=0;i<dwCount;i++)
{
stations[1].vl[i]=vdt[i];
}
stations[1].kz=0;
stations[1].flag=1;
return S_OK;
}
STDMETHODIMP Copcinteface::getOPCdt(short stno, short ct)
{
// TODO: Add your implementation code here
return S_OK;
}
STDMETHODIMP Server2::sethotuse(short hot)
{
// TODO: Add your implementation code here
switch(hot)
{
case 0:
comsertype=0;
break;
case 1:
comsertype=1;
break;
}
return S_OK;
}
STDMETHODIMP Server2::clearFlg()
{
// TODO: Add your implementation code here
tranflg=0;
return S_OK;
}
STDMETHODIMP Server2::getrjdata()
{
// TODO: Add your implementation code here
Server1::Read_File();
for(int i=0;i<rtinfo.count;i++)
File4.flag[rtinfo.st[i].stno]=4;
fz_ini_req=1;
scanflg=true;
getremoteinfo();
return S_OK;
}
STDMETHODIMP Server2::init()
{
// TODO: Add your implementation code here
int i;
for(i=0;i<rtinfo.count;i++)
File4.flag[rtinfo.st[i].stno]=4;
return S_OK;
}
bool Server2::setdname(short wno,unsigned char name[16],unsigned char depart[16])
{
int i=0;
int j;
while((i<prst.count)&&(wno!=prst.pl[i].workno))
i++;
if(i<prst.count)
{
for(j=0;j<16;j++)
name[j]=prst.pl[i].name[j];
name[15]=0;
for(j=0;j<16;j++)
depart[j]=prst.pl[i].depart[j];
depart[15]=0;
return 1;
}
return 0;
}
STDMETHODIMP Server2::getotherName(char *name)
{
// TODO: Add your implementation code here
for(int i=0;i<32;i++)
name[i]=Files.otherpcname[i];
name[i]=0;
return S_OK;
}
bool Server2::setEventRecord(int no, int vl1, int vl2)
{
int i,j;
DATE current;
SYSTEMTIME pdt;
char evtname[16]="";
Evtitem evtarr;
FILE *file;
char path[_MAX_PATH]="";
unsigned char tmp[_MAX_PATH]="";
char fn[_MAX_PATH];
GetLocalTime(&pdt);
current=dateCal(pdt.wYear,pdt.wMonth,pdt.wDay,pdt.wHour,pdt.wMinute,pdt.wSecond);
evtarr.number=no;
evtarr.recordtime=current;
evtarr.vl1=vl1;
evtarr.vl2=vl2;
switch(no)
{
case 1:
strcpy(evtname,"异地控制");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 2:
strcpy(evtname,"手动控制");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 3:
strcpy(evtname,"KJ95配置更新");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 4:
strcpy(evtname,"系统启动");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 5:
strcpy(evtname,"分站初始化");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 6:
strcpy(evtname,"定点巡检");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 7:
strcpy(evtname,"撤消定点");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 8:
strcpy(evtname,"人员档案更新");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 9:
strcpy(evtname,"修改人员信息");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 10:
strcpy(evtname,"删除人员信息");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 11:
strcpy(evtname,"KJ69系统更新");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 12:
strcpy(evtname,"修改区域配置");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 13:
strcpy(evtname,"删除区域配置");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 14:
strcpy(evtname,"修改探头配置");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
case 15:
strcpy(evtname,"删除探头配置");
Server1::signed_To_unsigned(evtname,evtarr.Evtname);
break;
}
if (strlen(evtname)<sizeof(evtarr.Evtname))
evtarr.Evtname[strlen(evtname)]=0;
_mbscpy(tmp,Curpath);
Server1::unsigned_To_signed(tmp,path);
strcpy(fn,path);
strcat(fn,"\\SYSEVENTS.DAT");
if ((file=fopen(fn,"a+"))==NULL)
return 0 ;
fwrite(&evtarr,sizeof(evtarr),1,file);
fclose(file);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -