📄 main.cpp
字号:
NewClient->LingerOnOff=wsLingerOff;
NewClient->OnDataAvailable = ClientDataAvailable;
NewClient->OnSessionClosed = ClientSessionClosed;
NewClient->HSocket = SocketUnRealTCPServerListner->Accept();
if(QAMUnRealHeaderGotIt)NewClient->Send(QAMUnRealHeader,QAMUnRealHeadersize);
else
{
//Display("close delay\r");
NewClient->CloseDelayed();
}
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::Display(AnsiString Msg)
{
//if(!QAMForm->Showing)return;
criticalsection->Acquire();
tstrings->Add(Msg);
criticalsection->Release();
PostMessage(this->Handle,CM_GOTTEXTDATABLOCK, 0,0);
}
void __fastcall TQAMForm::FormDestroy(TObject *Sender)
{
FILE *output_file;
output_file = fopen("Wisdom.ini", "w");
if(output_file!=NULL)
{
fftw_export_wisdom_to_file(output_file);
fclose(output_file);
}
else Application->MessageBox("Failed To Save Wisdom.", "Alert!", MB_OK);
if (FClients) {
delete FClients;
FClients = NULL;
}
if(ftp_clients)
{
for(int i=0;i<ftp_clients->Count;i++)delete((FTPClient_PutFile*)ftp_clients->Items[i]);
delete ftp_clients;
ftp_clients=NULL;
}
delete [] rs232incharbuf;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::ClientDataAvailable(TObject *Sender,
WORD Error)
{
char Buf[1280];
int Len;
Len = ((TWSocket *)Sender)->Receive(&Buf, sizeof(Buf) - 1);
if (Len <= 0)return;
// Remove any trailing CR/LF
while ((Len > 0) &&
((Buf[Len - 1] == '\r') || (Buf[Len - 1] == '\n')))
Len--;
// Nul terminate data
Buf[Len] = 0;
// Display("DataAvailable: \"" + (AnsiString)Buf + "\"\r");
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::ClientSessionClosed(TObject *Sender,
WORD Error)
{
TWSocket *Cli;
int Itm;
Cli = (TWSocket *)Sender;
// Display("Client diconnected\r");
Itm = FClients->IndexOf(Cli);
if (Itm >= 0)
FClients->Delete(Itm);
// We can"t destroy a TWSocket from a SessionClosed event handler.
// So we post a message to delay destruction until we are out of the
// message handler.
PostMessage(Handle, WM_DESTROY_SOCKET, 0, (LPARAM)Cli);
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::WMDestroySocket(TMessage Msg)
{
delete (TWSocket *)(Msg.LParam);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TQAMForm::SendRs232(unsigned char * Buf,int Len)
{
rs232criticalsection->Acquire();
if(sending)
{
for(int i=0;i<Len;i++)
{
rs232outcharbuf[rs232outcharbufptr]=Buf[i];
rs232outcharbufptr++;
if(rs232outcharbufptr>=sizeof(rs232outcharbuf))
{
rs232outcharbufptr=0;
//if we get here where sending data to quick to the rs232 port
}
}
}
else
{
rs232outcharbufptr=0;
sending=true;
CiaComPort1->Send(Buf,Len);
}
rs232criticalsection->Release();
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::CiaComPort1DataSent(TObject *Sender)
{
rs232criticalsection->Acquire();
CiaComPort1->PurgeTx();
if(rs232outcharbufptr)
{
CiaComPort1->Send(rs232outcharbuf,rs232outcharbufptr);
rs232outcharbufptr=0;
}
else
{
sending=false;
}
rs232criticalsection->Release();
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::CMStationIDChanged(TMessage &Msg)
{
AnsiString tas;
StationIDRec=StationIDRec.Trim();
tas="";
for(int i=1;i<=StationIDRec.Length();i++)
{
char ch=StationIDRec[i];
if( ((ch>='A')&&(ch<='Z')) || ((ch>='a')&&(ch<='z')) || ((ch>='0')&&(ch<='9')) || (ch==' ') || (ch=='!')|| (ch=='@')|| (ch=='#')|| (ch=='$')|| (ch=='%')|| (ch=='^')|| (ch=='&')|| (ch=='-')|| (ch=='+')|| (ch=='{')|| (ch=='}')|| (ch=='[')|| (ch==']')|| (ch==',')|| (ch=='\'')|| (ch==';'))tas+=(AnsiString)ch;
}
RXStationIDText->Caption=StationIDRec;
RXStationIDText->Cursor=crHandPoint;
//StatusBar1->Panels->Items[1]->Text="StationID=\""+StationIDRec+"\"";
StationIDRecDirectoryCompatibil=tas;
SaveDirectory=ExtractFilePath(Application->ExeName)+"\\"+tas;
CreateDir(SaveDirectory);
UpDateSaveDirectoryList();
}
//------------------------------------------------------------------------
// web reciveing section
//------------------------------------------------------------------------
//------------------------------------------------------------------------
void __fastcall TQAMForm::CMGotFilePacketForYou(TMessage &Msg)
{
bool found;
int tage;
//Display("Got Packet For You\r");
int pktsize=*(int*)&file_pkt_buffer[file_pkt_buffer_ptr_r];
if(pktsize==-1)
{
file_pkt_buffer_ptr_r=0;
pktsize=*(int*)&file_pkt_buffer[file_pkt_buffer_ptr_r];
//Display("gotbacktrack\r");
}
file_pkt_buffer_ptr_r+=4;
int namelen=StrLen(&file_pkt_buffer[file_pkt_buffer_ptr_r]);
AnsiString name=(AnsiString)(char*)&file_pkt_buffer[file_pkt_buffer_ptr_r];
int size=*((int*)&file_pkt_buffer[file_pkt_buffer_ptr_r+namelen+1]);
int age=*((int*)&file_pkt_buffer[file_pkt_buffer_ptr_r+namelen+5]);
int pos=*((int*)&file_pkt_buffer[file_pkt_buffer_ptr_r+namelen+9]);
// Display("Name="+name+" Size="+size+" pos="+pos+"\r");
StatusBar1->Panels->Items[1]->Text=(AnsiString)name+" ("+(int)(100*(double)pos/(double)size)+"%)";
// Display((AnsiString)name+" "+pos+"\r");
found=false;
for(unsigned int i=0;i<File_name_size_date.size();i++)
{
if(File_name_size_date[i].Filename==name)
{
if((File_name_size_date[i].FileDate==age)&&(File_name_size_date[i].FileSize==size))found=true;
else {DeleteFile(SaveDirectory+"\\"+name);Display("File Different Deleted Old One\r");UpDateSaveDirectoryList();}
break;
}
}
if(found)
{
// Display("Found File\r");
}
else
{
// Display("File Not Found\rLooking For met file \""+name+".met"+"\"\r");
found=false;
for(unsigned int i=0;i<File_name_size_date.size();i++)
{
if(File_name_size_date[i].Filename==name+".met")
{
tage=File_name_size_date[i].FileDate;
//Display((AnsiString)"metfile found name="+name+".met"+" age="+age+"\r");
if(File_name_size_date[i].FileDate==age)found=true;
else
{
if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
if(webfilfilerec>=0)
{
//int delme=
FileWrite(webfilfilerec,fil_data.begin(),sizeof(int)*fil_data.size());//&fil_data[0],4*fil_data.size());
//Display((AnsiString)"bytes="+delme+"\r");
FileClose(webfilfilerec);
}
webfilfilerec=-2;
DeleteFile(SaveDirectory+"\\"+name+".met");
DeleteFile(SaveDirectory+"\\"+name+".fil");
//Display((AnsiString)"MetFile Different Deleted Old One. should be=\""+age+"\" but on disk=\""+File_name_size_date[i].FileDate+"\"\r");
webmetfilenamerec="";
UpDateSaveDirectoryList();
}
break;
}
}
if(!found)
{
// Display("Met File Not Found\rCreating and opening met and fil files\r");
if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
if(webfilfilerec>=0)
{
//displayfildata();
//int delme=
FileWrite(webfilfilerec,fil_data.begin(),sizeof(int)*fil_data.size());//&fil_data[0],4*fil_data.size());
//Display((AnsiString)"bytes="+delme+"\r");
FileClose(webfilfilerec);
}
webfilfilerec=-2;
webmetfilenamerec=name+".met";
webmetfilerec=FileCreate(SaveDirectory+"\\"+webmetfilenamerec);
FileSetDate(webmetfilerec, age);
webfilfilerec=FileCreate(SaveDirectory+"\\"+name+".fil");
if(webmetfilerec==-1)Display("Error Creating Met File\r");
if(webfilfilerec==-1)Display("Error Creating Fil File\r");
//Display("MetFile="+SaveDirectory+"\\"+webmetfilenamerec+"\r");
fil_data.resize(1);
fil_data[0]=0;
UpDateSaveDirectoryList();
}
else
{
// Display("Met File Found\r");
if((webmetfilerec>=0)&&(webfilfilerec>=0)&&(webmetfilenamerec==(name+".met")))
{
// Display("Met And Fil Files Allready Open\r");
}
else
{
// Display("Opening Met And Fil Files\r");
if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
if(webfilfilerec>=0)
{
//displayfildata();
//int delme=
FileWrite(webfilfilerec,fil_data.begin(),sizeof(int)*fil_data.size());//&fil_data[0],4*fil_data.size());
//Display((AnsiString)"bytes="+delme+"\r");
FileClose(webfilfilerec);
}
webfilfilerec=-2;
webmetfilenamerec=name+".met";
webmetfilerec=FileOpen(SaveDirectory+"\\"+webmetfilenamerec,fmOpenWrite);
webfilfilerec=FileOpen(SaveDirectory+"\\"+name+".fil",fmOpenReadWrite);
if(webmetfilerec==-1)Display("Error Opening Met File\r");
if(webfilfilerec==-1)Display("Error Opening Fil File\r");
FileSetDate(webmetfilerec, tage);
unsigned int num_bytes_to_read = FileSeek(webfilfilerec,0,2);
FileSeek(webfilfilerec,0,0);
fil_data.resize(num_bytes_to_read/sizeof(int));
num_bytes_to_read = FileRead(webfilfilerec, &fil_data[0], num_bytes_to_read);
FileSeek(webfilfilerec,0,0);
if(num_bytes_to_read!=(sizeof(int)*fil_data.size()))Display("Error Loading Fil file Data\r");
// Display("\r++++++++\ropening name="+name+"\r");
// Display((AnsiString)"bytes="+num_bytes_to_read+"\r");
// displayfildata();
// Display("++++++++++\r");
// for(unsigned int i=0;i<fil_data.size();i++)Display((AnsiString)"fil_pos="+fil_data[i]+"\r");
}
}
if((webmetfilerec>=0)&&(webfilfilerec>=0)&&(webmetfilenamerec==(name+".met")))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -