void RunnerView::readSocket() { // qDebug() << "RunnerView::readSocket - bytes available:" << m_socket->bytesAvailable(); Message* m(Message::read(m_socket)); if (m) { switch (m->type()) { case MessageType::Undefined : qWarning("RunnerView::readSocket - message type: Undefined"); break; case MessageType::CloneRequest : { handleCloneRequest(); break; } case MessageType::CloneData : { CloneDataMessage* cdm(dynamic_cast<CloneDataMessage*>(m)); handleCloneData(cdm); break; } case MessageType::Mouse : { MouseMessage* mm(dynamic_cast<MouseMessage*>(m)); handleMouse(mm); break; } case MessageType::Close : quitApplication(); break; default : { qDebug() << "RunnerView::readSocket - message:" << *m; break; } } delete m; } if (m_socket->bytesAvailable()) { QMetaObject::invokeMethod(this, "readSocket", Qt::QueuedConnection); } }
void RunnerView::handleCloneRequest() { CloneDataMessage cdm(m_appUid); setItemToMessage(cdm, rootObject()); cdm.write(m_socket); }
bool CArchiver7ZIP::Compress(LPCTSTR ArcFileName,std::list<CString> &ParamList,CConfigManager &ConfMan,const PARAMETER_TYPE Type,int Options,LPCTSTR lpszFormat,LPCTSTR lpszMethod,LPCTSTR lpszLevel,CString &strLog) { if(!IsOK()){ return false; } ASSERT(0!=_tcslen(ArcFileName)); TRACE(_T("ArcFileName=%s\n"),ArcFileName); //分割書庫の場合は自己解凍は出来ない if((Options&COMPRESS_SPLIT)&&(Options&COMPRESS_SFX)){ ErrorMessage(CString(MAKEINTRESOURCE(IDS_ERROR_CANNOT_SPLIT_SFX))); strLog=CString(MAKEINTRESOURCE(IDS_ERROR_CANNOT_SPLIT_SFX)); Options&=~COMPRESS_SFX; } //============================================== // レスポンスファイル用テンポラリファイル名取得 //============================================== TCHAR ResponceFileName[_MAX_PATH+1]; FILL_ZERO(ResponceFileName); if(!UtilGetTemporaryFileName(ResponceFileName,_T("zip"))){ strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_CREATE)); return false; } ASSERT(0!=_tcslen(ResponceFileName)); //============================================ // 自己解凍ファイル用テンポラリファイル名取得 //============================================ TCHAR SFXTemporaryFileName[_MAX_PATH+1]; FILL_ZERO(SFXTemporaryFileName); TCHAR SFXModulePath[_MAX_PATH+1]; FILL_ZERO(SFXModulePath); bool bZIPSFX=((0!=(Options&COMPRESS_SFX))&&(PARAMETER_ZIP==Type)); if(bZIPSFX){ //2段階作成する if(!UtilGetTemporaryFileName(SFXTemporaryFileName,_T("sfx"))){ strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_CREATE)); return false; } ASSERT(0!=_tcslen(SFXTemporaryFileName)); DeleteFile(SFXTemporaryFileName);//ゴミファイル消去 //---SFXモジュール LPTSTR lptemp; { //安全なパスに移動;DLL読み込み対策 CCurrentDirManager cdm(UtilGetModuleDirectoryPath()); if(!SearchPath(NULL,_T("SFX32GUI.DAT"),NULL,_MAX_PATH,SFXModulePath,&lptemp)){ strLog.Format(IDS_ERROR_SFX_MODULE_NOT_FOUND,_T("SFX32GUI.DAT")); return false; } } } //==================================================== // レスポンスファイル内に圧縮対象ファイル名を記入する // アーカイブファイル名はコマンドラインで直接指定する //==================================================== { HANDLE hFile=CreateFile(ResponceFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE==hFile){ strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_ACCESS)); return false; } TRACE(_T("レスポンスファイルへの書き込み\n")); std::list<CString>::iterator ite; for(ite=ParamList.begin();ite!=ParamList.end();ite++){ CPath strPath=*ite; if(strPath.IsDirectory()){ strPath.Append(_T("*")); } WriteResponceFile(hFile,strPath); } CloseHandle(hFile); } //=========================== // DLLに渡すオプションの設定 //=========================== TRACE(_T("DLLに渡すオプションの設定\n")); CString Param;//コマンドライン パラメータ バッファ CConfigZIP confZIP; CConfig7Z conf7Z; switch(Type){ case PARAMETER_ZIP: //ZIP形式で圧縮 confZIP.load(ConfMan); break; case PARAMETER_7Z: //7z形式で圧縮 conf7Z.load(ConfMan); break; } switch(Type){ case PARAMETER_ZIP: //ZIP形式で圧縮 if(!FormatCompressCommandZIP(confZIP,Param,bZIPSFX,Options,lpszMethod,lpszLevel,strLog)){ DeleteFile(ResponceFileName); return false; } break; case PARAMETER_7Z: //7z形式で圧縮 if(!FormatCompressCommand7Z(conf7Z,Param,Options,lpszMethod,strLog)){ DeleteFile(ResponceFileName); return false; } break; } //分割 if(Options&COMPRESS_SPLIT){ C7Zip32VolumeSizeDialog vsd; if(IDOK!=vsd.DoModal())return false; CString temp; temp.Format(_T("-v%d%s "),vsd.VolumeSize,ZIP_VOLUME_UNIT[vsd.SelectIndex].ParamName); Param+=temp; } Param+=_T("-scsUTF-8 "); //レスポンスファイルのコードページ指定 //作業ディレクトリ Param+=_T("\"-w"); Param+=UtilGetTempPath(); Param+=_T("\" "); //圧縮先ファイル名指定 if(bZIPSFX){ Param+=_T("\""); Param+=SFXTemporaryFileName; Param+=_T("\" "); } else{ Param+=_T("\""); Param+=ArcFileName; Param+=_T("\" "); } //レスポンスファイル名指定 Param+=_T("\"@"); Param+=ResponceFileName; Param+=_T("\""); ASSERT(!Param.IsEmpty()); TRACE(_T("ArchiveHandler Commandline Parameter:%s\n"),Param); TRACE(_T("ArchiveHandler呼び出し\n")); std::vector<BYTE> szLog(LOG_BUFFER_SIZE); szLog[0]='\0'; int Ret=ArchiveHandler(NULL,C2UTF8(Param),(LPSTR)&szLog[0],LOG_BUFFER_SIZE-1); CString strTmp; UtilToUNICODE(strTmp,&szLog[0],szLog.size()-1,UTILCP_UTF8); //strLog=&szLog[0]; strLog=strTmp; //使ったレスポンスファイルは消去 DeleteFile(ResponceFileName); //エラー時ログ出力 if(!bZIPSFX||0!=Ret){ if(bZIPSFX){ DeleteFile(SFXTemporaryFileName); } return 0==Ret; } //================================== // 自己解凍書庫に変換(バイナリ結合) //================================== //出力先ファイルを開く HANDLE hArcFile=CreateFile(ArcFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE==hArcFile){ strLog.Format(IDS_ERROR_ACCESS_OUTPUT_FILE,ArcFileName); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } { //SFXモジュールを読み取りモードで開く HANDLE hSFXModuleFile=CreateFile(SFXModulePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE==hSFXModuleFile){ strLog.Format(IDS_ERROR_SFX_MODULE_CANNOT_ACCESS,SFXModulePath); CloseHandle(hArcFile); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } //SFXモジュールの中身をコピー int Result=UtilAppendFile(hArcFile,hSFXModuleFile); if(Result>0){ //読み取りエラー strLog.Format(IDS_ERROR_SFX_MODULE_CANNOT_ACCESS,SFXModulePath); CloseHandle(hArcFile); CloseHandle(hSFXModuleFile); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } else if(Result<0){ //書き込みエラー strLog.Format(IDS_ERROR_ACCESS_OUTPUT_FILE,ArcFileName); CloseHandle(hArcFile); CloseHandle(hSFXModuleFile); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } CloseHandle(hSFXModuleFile); } { //テンポラリファイルを読み取りモードで開く HANDLE hSFXTempFile=CreateFile(SFXTemporaryFileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(INVALID_HANDLE_VALUE==hSFXTempFile){ strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_ACCESS)); CloseHandle(hArcFile); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } //テンポラリファイルの中身をコピー int Result=UtilAppendFile(hArcFile,hSFXTempFile); if(Result>0){ //読み取りエラー strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_ACCESS)); CloseHandle(hArcFile); CloseHandle(hSFXTempFile); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } else if(Result<0){ //書き込みエラー strLog.Format(IDS_ERROR_ACCESS_OUTPUT_FILE,ArcFileName); CloseHandle(hArcFile); CloseHandle(hSFXTempFile); DeleteFile(ArcFileName); DeleteFile(SFXTemporaryFileName); return false; } CloseHandle(hSFXTempFile); DeleteFile(SFXTemporaryFileName); } CloseHandle(hArcFile); return true; }