123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <windows.h>
- #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);
- }
- //---------------------------------------------------------------------------
|