//--------------------------------------------------------------------------- #include #include #pragma hdrstop //--------------------------------------------------------------------------- #include "CenterCommF.h" //#include "CenterProtocolF.h" #include "DMNetServerF.h" //--------------------------------------------------------------------------- #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) //--------------------------------------------------------------------------- DWORD CComm_CheckIpAddress(char *ABuff) { BYTE add[4], i; unsigned long val; for (i = 0; i < 4; i++, ABuff++) { if ((val = strtoul(ABuff, &ABuff, 0)) > 255) return 0; add[i] = (BYTE)val; if(i < 3 && *ABuff != '.')return 0; } if(*(DWORD *)&add == 0 || *(DWORD *)&add == 0xFFFFFFFF) return 0; return *(DWORD *)&add; } //--------------------------------------------------------------------------- int CheckDigit(AnsiString Str) { int ii; if(Str.Length() == 0) return S_FAIL; for (ii = 1; ii <= Str.Length(); ii++) { if(!isdigit(Str [ii]))return S_FAIL; } return S_SUCC; } //--------------------------------------------------------------------------- int CheckPort(AnsiString Port) { if (CheckDigit(Port) || Port.ToInt() < 0 || Port.ToInt() > 65535) return S_FAIL; return Port.ToInt(); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- DWORD ip2ulong(char *AIp); char *ulong2ip(DWORD AIp); //--------------------------------------------------------------------------- DWORD CComm_ip2ulong(char *AIp) { return ip2ulong(AIp); } //--------------------------------------------------------------------------- char* CComm_ulong2ip(DWORD AIp) { return ulong2ip(AIp); } //--------------------------------------------------------------------------- int CComm_SetBitString(char *ABuff, int ABit, int AOnOff/*=1*/) { if (AOnOff == 1) ABuff[ABit / 8] |= (1 << (7 - (ABit % 8))); else { ABuff[ABit / 8] &= ~(1 << (7 - (ABit % 8))); } return VERR_NONE; } /*--------------------------------------------------------------------------*/ int CComm_GetBitString(char *ABuff, int ABit) { return ((ABuff[ABit / 8] & (1 << (7 - (ABit % 8)))) ? 1 : 0); } /*--------------------------------------------------------------------------*/ #pragma pack(push, 1) typedef struct { BYTE val0 : 2; BYTE val1 : 2; BYTE val2 : 2; BYTE val3 : 2; } BIT_2; typedef union { BYTE cc; BIT_2 bit; } TWOBIT; #pragma pack(pop) int CComm_SetBitValue(BYTE *ABuff, int ABit, int AValue) { TWOBIT u; int nMok = ABit / 4; int nNam = ABit % 4; u.cc = ABuff[nMok]; switch(nNam) { case 0: u.bit.val0 = AValue; break; case 1: u.bit.val1 = AValue; break; case 2: u.bit.val2 = AValue; break; case 3: u.bit.val3 = AValue; break; } ABuff[nMok] = u.cc; return VERR_NONE; } /*--------------------------------------------------------------------------*/ int CComm_GetBitValue(BYTE *ABuff, int ABit) { int res = 0; TWOBIT u; int nMok = ABit / 4; int nNam = ABit % 4; u.cc = ABuff[nMok]; switch(nNam) { case 0: res = u.bit.val0; break; case 1: res = u.bit.val1; break; case 2: res = u.bit.val2; break; case 3: res = u.bit.val3; break; } return res; } /*--------------------------------------------------------------------------*/ int CComm_Initialize(long AHandle, AnsiString ATrsPrcsid, AnsiString FRcvPrcsId, int ABindPort) { int nResult = VERR_NONE; if (!DMNetServer) { try { DMNetServer = new TDMNetServer(NULL); } catch(Exception &e) { nResult = VERR_OTHER; } } DMNetServer->FHandle = (HWND)AHandle; DMNetServer->FTrsPrcsId = ATrsPrcsid; DMNetServer->FRcvPrcsId = FRcvPrcsId; DMNetServer->FBindPort = ABindPort; DMNetServer->FPktSeq = 0x00; return nResult; } //--------------------------------------------------------------------------- int CComm_Terminate() { //CComm_Close(); if (DMNetServer) { delete DMNetServer; DMNetServer = NULL; } return VERR_NONE; } //--------------------------------------------------------------------------- void FillVmsReqHead(HEADER *AHeader, int ADataSize) { AHeader->Stx = PKT_STX; AHeader->Seq = DMNetServer->GetNextPktSeq(); AHeader->MsgCl = 0x00; // 0x11 : µ¥ÀÌÅÍ Àü¼Û ½ÃÀÛ, 0x01 : µ¥ÀÌÅÍ Àü¼Û °è¼Ó, 0x00 : µ¥ÀÌÅÍ Àü¼Û Á¾·á, Default : 0x00 AHeader->RespTp = 0x00; // 0:Without Response, 1:With Response AHeader->SendNodeId = OPER_NODE_ID; AHeader->SendTaskId = OPER_TASK_ID; AHeader->SendTaskNo = PRCS_TASK_NO; AHeader->RecvNodeId = VMSP_NODE_ID; AHeader->RecvTaskId = VMSP_TASK_ID; AHeader->RecvTaskNo = PRCS_TASK_NO; AHeader->SystemCode = OPE_SYSTEM_CD; AHeader->OpCode = OP_CTRL_VMS; AHeader->BodySize = htonl(ADataSize); } //--------------------------------------------------------------------------- void FillVmsReqTail(TAIL *ATail) { ATail->Crc = 0x00; ATail->Etx = PKT_ETX; } //--------------------------------------------------------------------------- void FillVmsControl(BYTE ACommand, VMS_CONTROL *AControl, String AOperId, String AVmsId) { AnsiString sReqTime = Now().FormatString("yyyymmddhhnnss"); strcpy(AControl->OperId, AnsiString(AOperId).c_str()); /* ¿î¿µÀÚ ID */ strcpy(AControl->VmsId, AnsiString(AVmsId).c_str()); /* VMS ID */ //memcpy(AControl->OperId, AnsiString(AOperId).c_str(), OPER_ID_SZ); /* ¿î¿µÀÚ ID */ //memcpy(AControl->VmsId, AnsiString(AVmsId).c_str(), VMS_ID_SZ); /* VMS ID */ memcpy(AControl->ReqTime, sReqTime.c_str(), DATETIME_SZ); /* ¸í·É¼öÇà½Ã°¢ */ AControl->Command = ACommand; } int CComm_VmsReqReset(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId) { VMS_REQ_RESET req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)); FillVmsControl('X', &req.Control, AOperId, AVmsId); FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsReqBlank(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId) { VMS_REQ_BLANK req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)); FillVmsControl('B', &req.Control, AOperId, AVmsId); FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsReqCmncErrMin(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId, BYTE AErrMin) { VMS_REQ_ERR_MIN req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)+1); FillVmsControl('P', &req.Control, AOperId, AVmsId); req.ErrMin = AErrMin; FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsReqModlErrRate(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId, BYTE AErrRate) { VMS_REQ_ERR_NODL req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)+1); FillVmsControl('M', &req.Control, AOperId, AVmsId); req.ErrRate = AErrRate; FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsReqLumiSet(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId, BYTE ALumiMode, BYTE AValue) { VMS_REQ_LUMI req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)+1); FillVmsControl('L', &req.Control, AOperId, AVmsId); req.LumiMode = ALumiMode; req.Value = AValue; FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsReqPowerOnOff(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId, bool AOnOff/*true:on,false:off*/) { VMS_REQ_POWER req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)+1); FillVmsControl('S', &req.Control, AOperId, AVmsId); req.Power = AOnOff ? 0x01 : 0x00; FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsReqDbScenario(String ADstIpAddr, int ADstPort, String AOperId, String AVmsId, VMS_DB_SCNR *ADbScnr) { VMS_REQ_DB_SCENARIO req; memset((char*)&req, 0x00, sizeof(req)); FillVmsReqHead(&req.Head, sizeof(req.Control)+1+sizeof(VMS_DB_SCNR)); FillVmsControl('D', &req.Control, AOperId, AVmsId); memcpy((char*)&req.Scnr, (char*)ADbScnr, sizeof(VMS_DB_SCNR)); FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- void FillVmsNotiHead(BYTE AOpCode, HEADER *AHeader, int ADataSize) { AHeader->Stx = PKT_STX; AHeader->Seq = DMNetServer->GetNextPktSeq(); AHeader->MsgCl = 0x00; // 0x11 : µ¥ÀÌÅÍ Àü¼Û ½ÃÀÛ, 0x01 : µ¥ÀÌÅÍ Àü¼Û °è¼Ó, 0x00 : µ¥ÀÌÅÍ Àü¼Û Á¾·á, Default : 0x00 AHeader->RespTp = 0x00; // 0:Without Response, 1:With Response AHeader->SendNodeId = OPER_NODE_ID; AHeader->SendTaskId = OPER_TASK_ID; AHeader->SendTaskNo = PRCS_TASK_NO; AHeader->RecvNodeId = VMSM_NODE_ID; AHeader->RecvTaskId = VMSM_TASK_ID; AHeader->RecvTaskNo = PRCS_TASK_NO; AHeader->SystemCode = OPE_SYSTEM_CD; AHeader->OpCode = AOpCode; AHeader->BodySize = htonl(ADataSize); } //--------------------------------------------------------------------------- int CComm_VmsNotiRegIncident(String ADstIpAddr, int ADstPort) { VMS_NOTI_REG_INCD req; memset((char*)&req, 0x00, sizeof(req)); FillVmsNotiHead(OP_REG_INCIDENT, &req.Head, 0); FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsNotiRegDsplMsg(String ADstIpAddr, int ADstPort) { VMS_NOTI_REG_DSPL_MSG req; memset((char*)&req, 0x00, sizeof(req)); FillVmsNotiHead(OP_REG_DISP_VMS_MSG, &req.Head, 0); FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsNotiRegDfltMsg(String ADstIpAddr, int ADstPort, String AVmsId) { VMS_NOTI_REG_DFLT_MSG req; memset((char*)&req, 0x00, sizeof(req)); FillVmsNotiHead(OP_REG_DFLT_VMS_MSG, &req.Head, sizeof(NOTI_VMS)); strcpy(req.Data.VmsId, AnsiString(AVmsId).c_str()); /* VMS ID */ FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_VmsNotiRegEmgnMsg(String ADstIpAddr, int ADstPort, String AVmsId) { VMS_NOTI_REG_EMGN_MSG req; memset((char*)&req, 0x00, sizeof(req)); FillVmsNotiHead(OP_REG_EMER_VMS_MSG, &req.Head, sizeof(NOTI_VMS)); strcpy(req.Data.VmsId, AnsiString(AVmsId).c_str()); /* VMS ID */ FillVmsReqTail(&req.Tail); return DMNetServer->SendData(ADstIpAddr, ADstPort, (BYTE*)&req, sizeof(req)); } //--------------------------------------------------------------------------- int CComm_Close() { if (DMNetServer) { DMNetServer->Close(); } return VERR_NONE; } //--------------------------------------------------------------------------- int CComm_GetPort() { return DMNetServer->GetPort(); } //--------------------------------------------------------------------------- String CComm_GetIP() { return DMNetServer->GetIP(); } //--------------------------------------------------------------------------- int CComm_Open(int ABuffSize/*=8192*/) { return DMNetServer->Open(ABuffSize); } //---------------------------------------------------------------------------