📄 smgpfrm.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <IniFiles.hpp>
#pragma hdrstop
#include "SmgpFrm.h"
#include "md5.h"
#include "SmgpApi.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainFrm *MainFrm;
unsigned int sequenceid=0; // 消息流水号,顺序累加,步长为1
int Smgp_Reci_Times=0,Smgp_Send_Times=0,Smgp_Dis_Times=0;//CMPP保持连接的数据参数
//---------------------------------------------------------------------------
__fastcall TMainFrm::TMainFrm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int SMGP_InitInterface(AnsiString Address,int Port)
{
MainFrm->SmgpClient->Active=false;
MainFrm->SmgpClient->Address=Address;
MainFrm->SmgpClient->Port=Port;
MainFrm->SmgpClient->Active=true;
if(MainFrm->SmgpClient->Socket->Connected)
{
return 0;
}
else
{
return 1;
}
}
//---------------------------------------------------------------------------
int SMGP_CONNECT (AnsiString UserName,AnsiString PassWord,unsigned char LoginMode)
{
if(MainFrm->SmgpClient->Active)
{
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}
else
{
sequenceid++;
}
SMGP_HEADER_BUF* Connect_HEAD;
SMGP_LOGIN_BUF* Connect_BODY;
char* Connect_BUF;
int Total_Len;
Total_Len=sizeof(SMGP_HEADER_BUF)+sizeof(SMGP_LOGIN_BUF);
Connect_BUF=new char[Total_Len];
memset(Connect_BUF,0,Total_Len);
(char*)Connect_HEAD=Connect_BUF;
Connect_HEAD->Total_Len=htonl(42);
Connect_HEAD->CommandID=htonl(SMGP_LOGIN);
Connect_HEAD->SequenceID=htonl(sequenceid);
(char*)Connect_BODY=Connect_BUF+12;
strcpy(Connect_BODY->ClientID,UserName.c_str());
char src[40];
memset(src,0,40);
strcpy(src,UserName.c_str());
memset(src+UserName.Length(),0,7);
strcpy(src+UserName.Length()+7,PassWord.c_str());
AnsiString timestamp=FormatDateTime("MMDDHHMMSS",Now());
strcpy(src+UserName.Length()+7+PassWord.Length(),timestamp.c_str());
MD5_CTX md5;
md5.MD5Update(src,UserName.Length()+7+PassWord.Length()+10);
md5.MD5Final(src);
memcpy(Connect_BODY->AuthenticatorClient,src,16);
Connect_BODY->LoginMode=LoginMode;
Connect_BODY->TimeStamp=htonl(StrToInt(timestamp));
Connect_BODY->Version=0x13;
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(Connect_BUF,42);
delete [] Connect_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//-----------------------------------------------------------------------------
int SMGP_Submit(LPCTSTR SPNO,LPCTSTR OrgAddr,LPCTSTR DestAddr,LPCTSTR Order,
LPCTSTR FeeType,LPCTSTR FeeCode,unsigned char SubType,unsigned char NeedReport,
unsigned char DCS,unsigned int UD_Len,LPCTSTR UserData)
{
if(MainFrm->SmgpClient->Active)
{
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}
else
{
sequenceid++;
}
SMGP_HEADER_BUF* Submit_HEAD;
SMGP_SUBMIT_BUF* Submit_BODY;
char* Submit_BUF;
int Total_Len;
Total_Len=sizeof(SMGP_HEADER_BUF)+sizeof(SMGP_SUBMIT_BUF);
Submit_BUF=new char[Total_Len];
memset(Submit_BUF,0,Total_Len);
(char*)Submit_HEAD=Submit_BUF;
Submit_HEAD->Total_Len=htonl((Total_Len-252)+UD_Len);
Submit_HEAD->CommandID=htonl(SMGP_SUBMIT);
Submit_HEAD->SequenceID=htonl(sequenceid);
(char*)Submit_BODY=Submit_BUF+12;
Submit_BODY->SubType=SubType;
Submit_BODY->NeedReport=NeedReport;
Submit_BODY->Priority=1;
strcpy(Submit_BODY->ServiceID,Order);
strcpy(Submit_BODY->FeeType,FeeType);
strcpy(Submit_BODY->FeeCode,FeeCode);
Submit_BODY->MsgFormat=DCS;
strcpy(Submit_BODY->ValidTime,"");
strcpy(Submit_BODY->AtTime,"");
strcpy(Submit_BODY->SrcTermID,SPNO);
strcpy(Submit_BODY->ChangeTermID,OrgAddr);
Submit_BODY->DestTermIDCount=1;
strcpy(Submit_BODY->DestTermID,DestAddr);
Submit_BODY->MsgLenth=UD_Len;
memcpy(Submit_BODY->MsgContent,UserData,UD_Len);
strcpy(Submit_BODY->Reserve,"");
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(Submit_BUF,Total_Len-252+UD_Len);
delete [] Submit_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//------------------------------------------------------------------------------
int SMGP_Query(LPTSTR QueryTime,unsigned int QueryType,LPTSTR QueryCode)
{
if(MainFrm->SmgpClient->Active)
{
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}
else
{
sequenceid++;
}
SMGP_HEADER_BUF* Query_HEAD;
SMGP_QUERY_BUF* Query_BODY;
char* Query_BUF;
int Total_Len;
Total_Len=sizeof(SMGP_HEADER_BUF)+sizeof(SMGP_QUERY_BUF);
Query_BUF=new char[Total_Len];
memset(Query_BUF,0,Total_Len);
(char*)Query_HEAD=Query_BUF;
Query_HEAD->Total_Len=htonl(19);
Query_HEAD->CommandID=htonl(SMGP_QUERY);
Query_HEAD->SequenceID=htonl(sequenceid);
(char*)Query_BODY=Query_BUF+12;
strcpy(Query_BODY->Query_Time,QueryTime);
Query_BODY->Query_Type=QueryType;
strcpy(Query_BODY->Query_Code,QueryCode);
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(Query_BUF,19);
delete [] Query_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//----------------------------------------------------------------------------
int SMGP_ActiveTest()
{
if(MainFrm->SmgpClient->Active)
{
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}
else
{
sequenceid++;
}
SMGP_HEADER_BUF* NetActive_BUF;
NetActive_BUF=new SMGP_HEADER_BUF;
memset(NetActive_BUF,0,12);
NetActive_BUF->Total_Len=htonl(12);
NetActive_BUF->CommandID=htonl(SMGP_ACTIVE_TEST);
NetActive_BUF->SequenceID=htonl(sequenceid);
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(NetActive_BUF,12);
delete NetActive_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//-----------------------------------------------------------------------------
int SMGP_Exit()
{
if(MainFrm->SmgpClient->Active)
{
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}
else
{
sequenceid++;
}
SMGP_HEADER_BUF* Exit_BUF;
Exit_BUF=new SMGP_HEADER_BUF;
memset(Exit_BUF,0,12);
Exit_BUF->Total_Len=htonl(12);
Exit_BUF->CommandID=htonl(SMGP_EXIT);
Exit_BUF->SequenceID=htonl(sequenceid);
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(Exit_BUF,12);
delete Exit_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//----------------------------------------------------------------------------
int SMGP_NetActive(unsigned int Sequenceid)
{
if(MainFrm->SmgpClient->Active)
{
SMGP_HEADER_BUF* NetActive_BUF;
NetActive_BUF=new SMGP_HEADER_BUF;
memset(NetActive_BUF,0,12);
NetActive_BUF->Total_Len=htonl(12);
NetActive_BUF->CommandID=htonl(SMGP_ACTIVE_TEST_RESP);
NetActive_BUF->SequenceID=htonl(sequenceid);
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(NetActive_BUF,12);
delete NetActive_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//----------------------------------------------------------------------------
int SMGP_DeliverResp(unsigned int DelivSequenceid,unsigned char MsgID,unsigned int Status)
{
if(MainFrm->SmgpClient->Active)
{
SMGP_HEADER_BUF* DeliverResp_HEAD;
SMGP_DELIVER_RESP_BUF* DeliverResp_BODY;
char* DeliverResp_BUF;
int Total_Len;
Total_Len=sizeof(SMGP_HEADER_BUF)+sizeof(SMGP_DELIVER_RESP_BUF);
DeliverResp_BUF=new char[Total_Len];
memset(DeliverResp_BUF,0,Total_Len);
(char*)DeliverResp_HEAD=DeliverResp_BUF;
DeliverResp_HEAD->Total_Len=htonl(Total_Len);
DeliverResp_HEAD->CommandID=htonl(SMGP_DELIVER_RESP);
DeliverResp_HEAD->SequenceID=htonl(DelivSequenceid);
(char*)DeliverResp_BODY=DeliverResp_BUF+12;
DeliverResp_BODY->MsgID=MsgID;
DeliverResp_BODY->Status=Status;
bool ErrorCode;
ErrorCode=MainFrm->SmgpClient->Socket->SendBuf(DeliverResp_BUF,Total_Len);
delete DeliverResp_BUF;
if(ErrorCode)
{
return 0;
}
else
{
return 4;
}
}
else
{
return 1;
}
}
//----------------------------------------------------------------------------
void __fastcall TMainFrm::Log(int type,AnsiString LogContent)
{
if(mmlog->Lines->Count>=200)
{
SaveLog();
}
mmlog->Lines->Add(DateTimeToStr(Now())+": "+LogContent);
switch (type)
{
case 0: //一般信息提示
{
mmlog->SelStart=mmlog->Text.Length()-LogContent.Length()-2;
mmlog->SelLength=LogContent.Length()+2;
mmlog->SelAttributes->Size=10;
mmlog->SelAttributes->Color=clWhite;
break;
}
case 1: //出错告警信息提示
{
mmlog->SelStart=mmlog->Text.Length()-LogContent.Length()-2;
mmlog->SelLength=LogContent.Length()+2;
mmlog->SelAttributes->Size=12;
mmlog->SelAttributes->Color=clRed;
break;
}
case 2: //CMPP协议所有信息提示
{
mmlog->SelStart=mmlog->Text.Length()-LogContent.Length()-2;
mmlog->SelLength=LogContent.Length()+2;
mmlog->SelAttributes->Size=10;
mmlog->SelAttributes->Color=clYellow;
break;
}
case 3: //所有上行信息处理信息提示
{
mmlog->SelStart=mmlog->Text.Length()-LogContent.Length()-2;
mmlog->SelLength=LogContent.Length()+2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -