⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 QAM module to use in Java with an easy interface and powerful performance
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        int bytes=pktsize-13-namelen;
                        int endpos=pos+bytes-1;
                        found=false;
                        if(fil_data.size()>=2)
                        for(unsigned int i=1;i<(fil_data.size()-1);i+=2)
                        {
                                //Display((AnsiString)"fil_pos="+fil_data[i]+"\r");
                                //if(fil_data[i]==pos)
                                if(((pos>=fil_data[i])&&(pos<=fil_data[i+1]))||((endpos>=fil_data[i])&&(endpos<=fil_data[i+1]))) //if overlap
                                {
                                    //    Display((AnsiString)"fil_pos["+i+"]="+fil_data[i]+"  fil_pos["+(i+1)+"]="+fil_data[i+1]+"\r");
                                        //if(bytes!=fil_data[i+1])
                                        if((pos!=fil_data[i])||(endpos!=fil_data[i+1]))
                                        {
                                                //Display("Packet Size Has Changed, deleteing met and fil files\r");
                                                if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
                                                if(webfilfilerec>=0)FileClose(webfilfilerec);webfilfilerec=-2;
                                                DeleteFile(SaveDirectory+"\\"+name+".met");
                                                DeleteFile(SaveDirectory+"\\"+name+".fil");
                                                webmetfilenamerec="";
                                                UpDateSaveDirectoryList();
                                        }
                                        found=true;
                                        break;
                                }
                        }
                        if(found)
                        {
                                //Display((AnsiString)"Already Written This Packet To Met File, Skiping bytes so far="+fil_data[0]+"/"+size+"\r");
                        }
                         else
                         {
                                fil_data[0]+=bytes;
                                fil_data.push_back(pos);
                                fil_data.push_back(endpos);


                               // Display("Writeing To Met File\r");
                                if(FileSeek(webmetfilerec,pos,0)==-1)Display("Error Seeking\r");
                                if(FileWrite(webmetfilerec,((unsigned char*)&file_pkt_buffer[file_pkt_buffer_ptr_r+namelen+13]),bytes)==-1)Display("Error Writing\r");

    //                            Display((AnsiString)"name="+name+"  fil_data[0]="+fil_data[0]+"   size="+size+"\r");
                                if(fil_data[0]>size)
                                {
                                        //Display("File size mismatch, deleteing met and fil files\r");
                                        if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
                                        if(webfilfilerec>=0)FileClose(webfilfilerec);webfilfilerec=-2;
                                        DeleteFile(SaveDirectory+"\\"+name+".met");
                                        DeleteFile(SaveDirectory+"\\"+name+".fil");
                                        webmetfilenamerec="";
                                        UpDateSaveDirectoryList();
                                }
                                if(fil_data[0]==size)
                                {
                                   //     Display("Written all Packets To Met File, Closing Met And Fil Files, Renaming Met File, deleteing fil file\r");
                                   //     Display("finished=="+name+"\r");displayfildata();
                                        if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
                                        if(webfilfilerec>=0)FileClose(webfilfilerec);webfilfilerec=-2;
                                        if(!RenameFile(SaveDirectory+"\\"+name+".met",SaveDirectory+"\\"+name))Display("Error Renameing Met File\r");//webmetfilenamerec,SaveDirectory+"\\"+name))Display("Error Renameing Met File\r");
                                        DeleteFile(SaveDirectory+"\\"+name+".fil");
                                        webmetfilenamerec="";
                                        UpDateSaveDirectoryList();
                                }

                         }
                }

         }

        file_pkt_buffer_ptr_r+=pktsize;
}
//------------------------------------------------------------------------

void __fastcall TQAMForm::UpDateSaveDirectoryList()
{
        NameSizeDate nsd;
        File_name_size_date.resize(0);
        File_name_size_date.reserve(10);

        int iAttributes = faReadOnly | faHidden | faSysFile | faArchive;//faReadOnly | faHidden | faSysFile | faVolumeID  | faDirectory  | faArchive  | faAnyFile;
        TSearchRec sr;
        if (FindFirst(SaveDirectory+"\\*.*", iAttributes, sr) == 0)
        {
                do
                {
                        if ((sr.Attr & iAttributes) == sr.Attr)
                        {
                                nsd.Filename=sr.Name;
                                nsd.FileDate=FileAge(SaveDirectory+"\\"+nsd.Filename);
                                nsd.FileSize = sr.Size;
                                File_name_size_date.push_back(nsd);
                                //Display((AnsiString)"name="+sr.Name+"  size="+sr.Size+"\r");
                        }
                        Sleep(0);
                } while (FindNext(sr) == 0);
                FindClose(sr);
        }
        File_name_size_date.reserve(File_name_size_date.size()+10);
}


//-------------------------------------------------------------
//---------------------------------------------------------------
//        web sending section
//---------------------------------------------------------------
//---------------------------------------------------------------------------




//---------------------------------------------------------------------------
AnsiString __fastcall TQAMForm::GetNextFileNameToSend()
{
        if(SettingsForm->Showing)return ("");
        if(file_selector_pos_step.size()==0)return ("");
        int biggestpos=-1;
        int biggestval=-1;
        for(unsigned int i=0;i<file_selector_pos_step.size();i++)
        {
                bool inuse=false;
                for(int j=0;j<ftp_clients->Count;j++)
                {
                        if(((FTPClient_PutFile*)ftp_clients->Items[j])->PutName==SettingsForm->ValueListEditorFiles->Cells[0][i+1])
                        {
                                inuse=true;
                                break;
                        }
                }
                if((!inuse)&&(file_selector_pos_step[i].Pos>biggestval)&&(file_selector_pos_step[i].Step>0))//&&(ValueListEditorFiles->Cells[0][i+1]!=ftp_using_file_name))
                {
                        biggestval=file_selector_pos_step[i].Pos;
                        biggestpos=i;
                }
        }
        if(biggestpos<0)return ("");
        for(unsigned int i=0;i<file_selector_pos_step.size();i++)
        {
//                Display((AnsiString)file_pos_step.Pos[i]+" ");
                file_selector_pos_step[i].Pos+=file_selector_pos_step[i].Step;
        }
//        Display("\r");
        file_selector_pos_step[biggestpos].Pos=0;
        //Display((AnsiString)biggestpos+": "+ValueListEditorFiles->Cells[0][biggestpos+1]+" (sending) step="+file_selector_pos_step[biggestpos].Step+" \r");
        return SettingsForm->ValueListEditorFiles->Cells[0][biggestpos+1];
}
//---------------------------------------------------------------------------

void __fastcall TQAMForm::SendNextWebPkt(TMessage &Msg)
{
        if(webfile<-1)
        {
                webfilename=GetNextFileNameToSend();
                if(webfilename=="")
                {
                        gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;
                        return;
                }
                webfile=FileOpen(SettingsForm->JvDirectoryEditWebDir->Text+"\\"+webfilename, fmOpenRead | fmShareDenyNone);
                if(webfile<0){Display("ERROR opening file\r");webfile=-2;gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;return;}
                webfilelen = FileSeek(webfile,0,2);
                webfilepos=FileSeek(webfile,0,0);
                webfileage=FileAge(SettingsForm->JvDirectoryEditWebDir->Text+"\\"+webfilename);
                webpktsize=webfilename.Length();
                webpkt.resize(webpktsize+17+webpktdatasize);


                char* tp=webfilename.c_str();
                for(int i=0;i<webpktsize;i++)webpkt[i]=((unsigned char*)tp)[i];
                webpkt[webpktsize]=0;
                *((int*)&webpkt[webpktsize+1])=webfilelen;
                *((int*)&webpkt[webpktsize+5])=webfileage;
                *((int*)&webpkt[webpktsize+9])=webfilepos;
                //Display((AnsiString)"Opened file:\rName="+Directory+"\\"+webfilename+"\rage="+webfileage+"\rsize="+webfilelen+"\r");
        }
        if(webfile>=0)
        {
                webpktsize=webfilename.Length();
                *((int*)&webpkt[webpktsize+9])=webfilepos;
                int BytesRead = FileRead(webfile,&webpkt[webpktsize+13],webpktdatasize);
                webfilepos+=BytesRead;
                if(BytesRead>0)
                {
                        webpktsize+=13+BytesRead;
                        AddCRC32(&webpkt[0],&webpktsize);
                        mod->dataformatter->LoadNextBufferPacket(&webpkt[0],webpktsize,ptWeb);
                       // Display((AnsiString)"name="+(char*)webpkt+"\rfilesize="+*((int*)&webpkt[webfilename.Length()+1])+"\rage="+*((int*)&webpkt[webfilename.Length()+5])+"\rpos="+*((int*)&webpkt[webfilename.Length()+9])+"\rwebpktsize="+webpktsize+"\rCrc32="+*((unsigned int*)&webpkt[webpktsize-4])+"\r");
                }
                if(BytesRead<webpktdatasize)
                {
                        FileClose(webfile);
                        webfile=-2;
                        //Display("Closed File\r");
                }
        }
        gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::CMDirContentsChanged(TMessage &Msg)
{
        FileListBoxApplyPath(SettingsForm->JvDirectoryEditWebDir->Text);
        LoadSendingFileNames();
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//          ftp section
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1Authenticate(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &UserName, TFtpString &Password,
      bool &Authenticated)
{
        Authenticated=false;
        if(((AnsiString)UserName==SettingsForm->JvEditFTPUserName->Text)&&((AnsiString)Password==SettingsForm->JvEditFTPPassWord->Text))Authenticated=true;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ChangeDirectory(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &Directory, bool &Allowed)
{
        Allowed=false;
        if((AnsiString)Directory==Client->HomeDir)Allowed=true;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ClientConnect(TObject *Sender,
      TFtpCtrlSocket *Client, WORD AError)
{
        Client->HomeDir=SettingsForm->JvDirectoryEditWebDir->Text;
        int Itm=ftp_clients->Add(new FTPClient_PutFile);
        ((FTPClient_PutFile*)ftp_clients->Items[Itm])->Client=Client;
        ((FTPClient_PutFile*)ftp_clients->Items[Itm])->PutName="";
        ((FTPClient_PutFile*)ftp_clients->Items[Itm])->Storeing=false;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1MakeDirectory(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &Directory, bool &Allowed)
{
        Allowed=false;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ValidateRnTo(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &FilePath, bool &Allowed)
{
        GainFileAccess(Client,Client->FromFileName,false);
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ValidateRmd(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &FilePath, bool &Allowed)
{
        Allowed=false;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1AnswerToClient(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &Answer)
{
        FTPClient_PutFile *ftpclient_pufile;
        ftpclient_pufile=GetFTPClient_PutFile(Client);
        if((ftpclient_pufile)&&(!ftpclient_pufile->Storeing))ftpclient_pufile->PutName="";
}
//---------------------------------------------------------------------------
int __fastcall TQAMForm::FindFTPClient(TFtpCtrlSocket *Client)
{
        int Itm = -1;
        for(int i=0;i<ftp_clients->Count;i++)
        {
                if(((FTPClient_PutFile*)ftp_clients->Items[i])->Client==Client)
                {
                        Itm=i;
                        break;
                }
        }
        return Itm;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ClientDisconnect(TObject *Sender,
      TFtpCtrlSocket *Client, WORD AError)
{
        int Itm = FindFTPClient(Client);
        if(Itm>=0)
        {
                delete ((FTPClient_PutFile*)ftp_clients->Items[Itm]);
                ftp_clients->Delete(Itm);
        }
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ValidateDele(TObject *Sender,
      TFtpCtrlSocket *Client, TFtpString &FilePath, bool &Allowed)
{
        GainFileAccess(Client,(AnsiString)FilePath,false);
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::GainFileAccess(TFtpCtrlSocket *Client,AnsiString FilePath,bool Storeing)
{
        int Itm = FindFTPClient(Client);
        if(Itm<0) return;
        if(Storeing)((FTPClient_PutFile*)ftp_clients->Items[Itm])->Storeing=true;
         else ((FTPClient_PutFile*)ftp_clients->Items[Itm])->Storeing=false;
        ((FTPClient_PutFile*)ftp_clients->Items[Itm])->PutName=ExtractFileName(FilePath);
        if((((FTPClient_PutFile*)ftp_clients->Items[Itm])->PutName==webfilename)&&(webfile>=0))
        {
                FileClose(webfile);
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -