?? main.cpp
字號:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include "About.h"
#include "f_cinfo.h"
#include "f_ceshi.h"
#include "DataDef.h"
#include "ConstDef.h"
#include "f_shezhi.h"
#include "f_moniceshi.h"
//---------------------------------------------------------------------------
#pragma link "Trayicon"
#pragma link "PERFGRAP"
#pragma resource "*.dfm"
TMainForm *MainForm;
int iUserCountToday;
int iMoCountToday;
//---------------------------------------------------------------------------
//替換字符
AnsiString ChangeChar(AnsiString sDate,AnsiString cS,AnsiString cD)
{
for(int i=0;i<sDate.Length();i++)
{
if(sDate.SubString(i+1,1)==cS)
{
sDate=sDate.SubString(1,i)+cD+sDate.SubString(i+2,sDate.Length()-(i+1));
}
}
return sDate;
}
//-----------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent *Owner)
: TForm(Owner)
{
ReCon=false;
UserInfo=new TUserInfo();
YClientSocket=new TYClientSocket();
dtpProtocol=new TdtpProtocol();
YClientSocket->b_Connected=false;
iMoCountToday=0;
iUserCountToday=0;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FileExit1Execute(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
delete UserInfo;
delete YClientSocket;
delete dtpProtocol;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
Socket->Disconnect(Socket->SocketHandle);
Socket->Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormShow(TObject *Sender)
{
YClientSocket->GetClientSocket(ClientSocket1);
InitSystem();
ReadFromIni();
if(n_shezhi->CheckBox2->Checked)
{
Run(true);
}
//Panel6->Align=alClient;
}
//系統(tǒng)啟動
void TMainForm::Run(bool bReComSrv)
{
ReadIni(bReComSrv);
if(!UserInfo->OpenDatabase())
{
MessageBox(Handle,"連接數(shù)據(jù)庫失敗!\n請仔細(xì)檢查后重新連接數(shù)據(jù)庫。","錯誤",MB_OK|MB_ICONINFORMATION);
Label_db->Caption="未連接";
Label_db->Font->Color=clRed;
}
else
{
Label_db->Caption="已連接";
Label_db->Font->Color=clBlue;
}
Timer4->Enabled=true;
ToolButton5->Enabled=false;
N8->Enabled=false;
}
/*///////////////////////////////////////////////////////////////////
函數(shù)名: PubWriteToLog
輸入?yún)?shù):日志文件名除日期以外的后半部分 AnsiString
要存入日志文件的一條記錄 AnsiString
返回: void
功 能: 將一條數(shù)據(jù)寫入日志文件
*/
bool TMainForm::PubWriteToLog(AnsiString _filename,AnsiString data)
{
AnsiString filename,msg_str;
filename=Date();
filename+=_filename;
if((logfp=fopen(filename.c_str(),"a+"))==NULL)
{return false;}
//data=DateToStr(Date())+" "+TimeToStr(Time())+" "+data;
fprintf(logfp,"%s\n",data.c_str());
fclose(logfp);
return true;
}
/*///////////////////////////////////////////////////////////////////
函數(shù)名: InitSystem
返回: void
功 能: 初始化系統(tǒng)
*/
void TMainForm::InitSystem()
{
ToolButton1->Enabled=false;
N1->Enabled=false;
Timer6->Enabled=false;
Timer3->Enabled=false;
}
/*///////////////////////////////////////////////////////////////////
函數(shù)名: RecallSystem
返回: void
功 能: 正常化系統(tǒng)
*/
void TMainForm::RecallSystem()
{
ToolButton1->Enabled=true;
N1->Enabled=true;
Timer6->Enabled=true;
Timer3->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
if(!YClientSocket->ConnectToSrv())
{
MessageBox(Handle,"向服務(wù)器發(fā)送連接數(shù)據(jù)包時發(fā)生錯誤!","錯誤",MB_OK|MB_ICONINFORMATION);
return;
}
ShowOneData(9,"STRUCT_CENTER_LOGIN:向服務(wù)器發(fā)送連接數(shù)據(jù)包");
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
if(ToolButton5->Enabled==false)
if(YClientSocket->b_Connected)
{
StatusBar1->Panels->Items[2]->Text="與服務(wù)器連接正常";
}
else
{
StatusBar1->Panels->Items[2]->Text="登錄服務(wù)器。。。。。。";
}
StatusBar1->Panels->Items[3]->Text="記錄條數(shù):"+IntToStr(ListView2->Items->Count);
Label9->Caption=IntToStr(iUserCountToday);
Label11->Caption=IntToStr(iMoCountToday);
if(TimeToStr(Time())=="0:00:00")
{
iMoCountToday=0;
iUserCountToday=0;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::N2Click(TObject *Sender)
{
if(MessageBox(Handle,"你真的要退出嗎?","提問",MB_YESNO|MB_ICONQUESTION)==IDYES)
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::MenuItem3Click(TObject *Sender)
{
AboutBox=new TAboutBox(Application);
AboutBox->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
char szReceiveBuf[3000];
char szOneBuf[300];
long lCommandWord;
memset(szReceiveBuf,0,sizeof(szReceiveBuf));
int Len=Socket->ReceiveBuf(szReceiveBuf,3000);
int lp=0;
int ReceMsgLen=0;
while(lp<Len)
{
memset(szOneBuf,0,sizeof(szOneBuf));
//Total_Length
memcpy(&ReceMsgLen,&szReceiveBuf[lp],4);
ReceMsgLen=ntohl(ReceMsgLen);
//Command_ID
memcpy(&lCommandWord,&szReceiveBuf[lp+4],4);
switch (ntohl(lCommandWord))
{
case CTKP_CONNECT_RSP:
LoginRep(&szReceiveBuf[lp]);
break;
case CTKP_LINKTEST_RSP:
YClientSocket->RcvLinkTest();
if(n_shezhi->CheckBox1->Checked)
ShowOneData(8,"CTKP_LINKTEST_RSP");
break;
case CTKP_DELIVERY:
YClientSocket->DeliverRsp(&szReceiveBuf[lp],2);
Deliver(&szReceiveBuf[lp]);
break;
default: break;
}//switch
//移動指針
lp+=ReceMsgLen;
}//while
}
//---------------------------------------------------------------------------
//處理連接服務(wù)器應(yīng)答
void TMainForm::LoginRep(char *buff)
{
STRUCT_CONNECT_RSP s;
memset(&s,0,sizeof(s));
memcpy(&s,buff,sizeof(s));
switch(ntohl(s.sHeader.dwStatus))
{
case E_SUCCESS:
YClientSocket->ConnectToSrvRep();
ShowOneData(8,"CTKP_CONNECT_RSP:成功登錄到服務(wù)器!");
ReCon=false;
MainForm->RecallSystem();
MainForm->StatusBar1->Panels->Items[1]->Text=("啟動時間 "+DateToStr(Date())+" "+TimeToStr(Time()));
Label_srv->Caption="已連接";
Label_srv->Font->Color=clBlue;
break;
case 1:
ShowOneData(8,"CTKP_CONNECT_RSP:登錄到服務(wù)器失敗!返回值:"+StrToInt(ntohl(s.sHeader.dwStatus)));
break;
}
}
//---------------------------------------------------------------------------
//接收服務(wù)器下發(fā)數(shù)據(jù)
void TMainForm::Deliver(char *buff)
{
STRUCT_DELIVERY s;
memset(&s,0,sizeof(STRUCT_DELIVERY));
memcpy(&s,buff,sizeof(s));
ShowOneSimDate(7,"STRUCT_DELIVERY:"+AnsiString(s.sCMPP12Delivery.szSrc_terminalID)+" "+AnsiString(s.sCMPP12Delivery.Msg_Content),AnsiString(s.sCMPP12Delivery.szSrc_terminalID));
if(AnsiString(s.sCMPP12Delivery.szSrc_terminalID).Length()<11||AnsiString(s.sCMPP12Delivery.Msg_Content)=="") return;
STRUCT_INBUFF sInBuff;
sInBuff.sim=s.sCMPP12Delivery.szSrc_terminalID;
sInBuff.data=s.sCMPP12Delivery.Msg_Content;
sInBuff.data=sInBuff.data.SubString(3,sInBuff.data.Length()-2);
dtpProtocol->InputBuffer.Length++;
dtpProtocol->InputBuffer[dtpProtocol->InputBuffer.Length-1]=sInBuff;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer3Timer(TObject *Sender)
{
//向服務(wù)器發(fā)送信息
if(dtpProtocol->OutputBuffer.Length>0)
{
if(YClientSocket->b_Connected)
{
STRUCT_OUTBUFF sOutBuff;
sOutBuff=dtpProtocol->OutputBuffer[dtpProtocol->OutputBuffer.Length-1];
if(sOutBuff.bRealSend)
YClientSocket->SendDataToSrv(sOutBuff.data,sOutBuff.sim,sOutBuff.sourcesim);
ShowOneSimDate(9,"發(fā)送:"+sOutBuff.sim+" "+sOutBuff.data+" "+sOutBuff.sourcesim,sOutBuff.sim);
if(sOutBuff.sim==Edit1->Text)
{
int iTmp=StrToInt(Label14->Caption);
iTmp++;
Label14->Caption=IntToStr(iTmp);
}
dtpProtocol->OutputBuffer.Length--;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer6Timer(TObject *Sender)
{
//取得輸入緩沖區(qū)所有數(shù)據(jù),調(diào)用相應(yīng)處理函數(shù)分類處理
MainForm->dtpProtocol->GetInputBuffer();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer4Timer(TObject *Sender)
{
//發(fā)送測試信息
switch(YClientSocket->SendLinkTest(true))
{
case 0:
if(n_shezhi->CheckBox1->Checked)
ShowOneData(9,"STRUCT_CENTER_LINKTEST:向服務(wù)器發(fā)送測試消息");
Timer4->Interval=40000;
break;
case 1:
Timer4->Interval=2000;
break;
case 2:
ShowOneData(9,"連接服務(wù)器...");
Timer4->Interval=2000;
InitSystem();
Label_srv->Caption="未連接";
Label_srv->Font->Color=clRed;
break;
}
}
/*///////////////////////////////////////////////////////////////////
函數(shù)名: ShowOneData
輸入?yún)?shù):要顯示的圖標(biāo)編號 int
要顯示的內(nèi)容 AnsiString
返回: void
功 能: 在列表框中顯示一條系統(tǒng)信息
*/
void TMainForm::ShowOneData(int bNum,AnsiString data)
{
TListItem *ListItem;
ListItem=ListView2->Items->Add();
ListItem->Caption =DateToStr(Date())+" "+TimeToStr(Time());
ListItem->ImageIndex=bNum;
switch(bNum)
{
case 7:
ListItem->SubItems->Add("移動終端");
break;
case 8:
ListItem->SubItems->Add("服務(wù)器");
break;
case 9:
ListItem->SubItems->Add("本地");
break;
}
ListItem->SubItems->Add(data);
if(CheckBox1->Checked)
{
ListItem->MakeVisible(false);
ListView2->Perform(LVM_SCROLL,0,10);
}
if(ListView2->Items->Count>200)
{
for(int i=ListView2->Items->Count-1;i>=0;i--)
{
PubWriteToLog(".txt",ListView2->Items->Item[i]->Caption+ListView2->Items->Item[i]->SubItems->Strings[1]);
}
ListView2->Items->Clear();
}
}
void TMainForm::ShowOneData(TListView* ListView,int bNum,AnsiString data)
{
TListItem *ListItem;
ListItem=ListView->Items->Add();
ListItem->Caption =DateToStr(Date())+" "+TimeToStr(Time());
ListItem->ImageIndex=bNum;
switch(bNum)
{
case 7:
ListItem->SubItems->Add("移動終端");
break;
case 8:
ListItem->SubItems->Add("服務(wù)器");
break;
case 9:
ListItem->SubItems->Add("本地");
break;
}
ListItem->SubItems->Add(data);
ListItem->MakeVisible(false);
ListView->Perform(LVM_SCROLL,0,10);
if(ListView->Items->Count>200)
{
ListView->Items->Clear();
}
}
//顯示一條含手機(jī)的系統(tǒng)信息
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -