예제 #1
0
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);
    }
}
예제 #2
0
void RunnerView::handleCloneRequest()
{
    CloneDataMessage cdm(m_appUid);
    setItemToMessage(cdm, rootObject());
    cdm.write(m_socket);
}
예제 #3
0
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;
}