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

📄 transferprogdlg.cpp

📁 网络游戏龙族服务器端管理工具 rmtool 源代码
💻 CPP
字号:
// TransferProgDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RMTool.h"
#include "TransferProgDlg.h"
#include "Packet.h"
#include "ServerView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTransferProgDlg dialog


CTransferProgDlg::CTransferProgDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTransferProgDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTransferProgDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_pApp = (CRMToolApp*)AfxGetApp();
	m_bCancel = FALSE;

}


void CTransferProgDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTransferProgDlg)
	DDX_Control(pDX, IDC_PROGRESS_TOTAL, c_TotalProg);
	DDX_Control(pDX, IDC_PROGRESS_SERVER, c_ServerProg);
	DDX_Control(pDX, IDC_PROGRESS_FILE, c_FileProg);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTransferProgDlg, CDialog)
	//{{AFX_MSG_MAP(CTransferProgDlg)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
	ON_MESSAGE(UM_START_TRANSFER_NEWFILE, CTransferProgDlg::OnStartTransferNewFile)
	ON_MESSAGE(UM_SUCCESS_TRANSFER_FILE, CTransferProgDlg::OnSuccessTransferFile)
	ON_MESSAGE(UM_TRANSFERING, CTransferProgDlg::OnTransfering)	
	ON_MESSAGE(UM_ALL_TRANSFER_COMPLETE, CTransferProgDlg::OnAllTransferComplete)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTransferProgDlg message handlers


BOOL CTransferProgDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	SetProgressMode();

	memset(m_szConIp,0,sizeof(m_szConIp));		
	g_pFt->SetProgressingHandle( m_hWnd );		//DLL俊 Dialog狼 勤甸蔼阑 悸泼秦 霖促. 
	m_nCurFolderFileNum = 0;
	m_nSendedFolderFileCount = 0;				//泅犁 割俺狼 颇老鳖瘤 焊陈唱 货绰 墨款飘 
	m_nSendedServerCount = 0;					//泅犁 割俺狼 辑滚俊 颇老 焊陈唱 货绰 墨款飘 

//	TransferExeFile();

	if(ConnectAndStartTransfer() == NULL)
		return FALSE;
	
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


BOOL CTransferProgDlg::AddFolder(CString szPath)
{
	char file[ _MAX_PATH ];
	char temp[ _MAX_PATH ];	memset(temp,0,_MAX_PATH);
	//ConnectionInfo	result;		memset(&result,0,sizeof(result));
	CString ext;
	CString base = szPath;
	
	szPath += "\\*.*";
	CFileFind	finder;

	BOOL bWorking = finder.FindFile(szPath);

	while(bWorking)
	{
		bWorking = finder.FindNextFile();
		if(finder.IsDots())	continue;
		
		memset(file,0, _MAX_PATH);
		sprintf(file, "%s", finder.GetFileName());

		if(finder.IsDirectory())	//叼泛配府 捞搁 
		{
			sprintf(temp,"%s\\%s",base,file);

			if(!g_pFt->AddFile(temp, TRUE))
			{
				return FALSE;
			}
			
			if(!AddFolder(temp))	//犁蓖 龋免 
			{
				return FALSE;
			}

		}
		else //颇老捞搁 
		{
			ext = GetFileExt(file);
			ext.MakeLower();
			
			sprintf(temp,"%s\\%s",base,file);
			
			if(ext == "ini")
			{
				::GetPrivateProfileString("server_info","own_server_ip_for_server","",
											m_szConIp, sizeof(m_szConIp),temp );
				//result.dwPort = ::GetPrivateProfileInt("server_info","own_server_port_for_server",0,temp);
			}
/*			else if(ext == "exe")
			{
				int k=0;

			}*/
						
			//弃歹救狼 傈价秦具且 颇老狼 肮荐啊 割俺牢啊 烙矫肺 扁撅窍霸 秦滴磊..
			m_nCurFolderFileNum++;
			
			if(!g_pFt->AddFile(temp, FALSE))	
			{
				return FALSE;
			}
		}
	}

	finder.Close();
	return TRUE;
}

CString CTransferProgDlg::GetFileExt(CString szPath)
{
	return szPath.Right(szPath.GetLength() - szPath.ReverseFind('.') - 1);
}


//货肺款 颇老 傈价阑 矫累茄促绰 皋技瘤甫 DLL俊辑 罐酒 龋免登绰 勤甸矾捞促..
void CTransferProgDlg::OnStartTransferNewFile(WPARAM wParam, LPARAM lParam)
{		
	lParam;

	if(m_bCancel)	return;
	//wParam俊绰 傈价阑 矫累窍绰 颇老疙 CString* 啊 逞绢柯促. LPARAM俊绰 配呕 轿捞令 
	m_szCurTransferingFile = *((CString*)wParam);
	
	CString str;
	if(m_szCurTransferingFile.GetLength() > 40)
		str.Format("..%s Sending files...", m_szCurTransferingFile.Right(40));
	else
		str.Format("%s Sending files...",m_szCurTransferingFile);


	SetDlgItemText(IDC_STATIC_FILE,str);
}

//颇老 窍唱啊 己傍利栏肺 葛滴 Send 灯阑锭狼 皋技瘤甫 罐酒 龋免登绰 勤甸矾捞促..
void CTransferProgDlg::OnSuccessTransferFile(WPARAM wParam, LPARAM lParam)
{
	wParam;lParam;

	if(m_bCancel)	return;
	//exe颇老捞 傈价 肯丰等 版快 阿辑滚寸 exe颇老篮 窍唱父 傈价登骨肺..
	//弊锭狼 exe颇老阑 烙矫 历厘秦滴菌促啊..  秦寸 辑滚俊 措茄 颇老傈价捞 场唱搁
	//傈价罐篮 阿 弃歹肺 Copy窍扼绰 菩哦阑 朝妨霖促.
	if(GetFileExt(m_szCurTransferingFile) == "exe")
	{
		CString temp;
		CString temp2 = m_szCurTransferingFile.Right( m_szCurTransferingFile.GetLength() - m_szCurTransferingFile.ReverseFind('\\') - 1 );
		for(int i=0; i<4 ; i++)
		{
			temp = m_pApp->m_szServerFile[ m_nCurServerSet ][i];
			temp = temp.Right( temp.GetLength() - temp.ReverseFind('\\') -1 );
			
			if(!temp2.CompareNoCase(temp))
			{
				m_szCopyFile = temp;
			}
		}
	}
	
	m_szCurTransferingFile = "";
	m_nSendedFolderFileCount++;	//泅犁 割俺鳖瘤 罐疽唱 墨款飘 刘啊 

	CString str;
	str.Format("All %dFiles   Now %dFiles Transfer Complete.", m_nCurFolderFileNum , m_nSendedFolderFileCount);
	SetDlgItemText(IDC_STATIC_TOTAL,str);

	c_TotalProg.SetPos(m_nSendedFolderFileCount);	//橇肺弊饭胶官 悸泼 

}

//颇老 傈价吝老锭 泅犁 颇老傈价 柳青 惑炔 皋技瘤甫 罐酒 龋免登绰 勤甸矾捞促..
void CTransferProgDlg::OnTransfering(WPARAM wParam, LPARAM lParam)
{
	if(m_bCancel)	return;
	//wParam俊绰 醚 颇老 荤捞令啊..  lParam俊绰 泅犁鳖瘤 焊辰 颇老 荤捞令(byte)啊 朝酒柯促.
	CString str;
	DWORD	dwKB;
	if(wParam > 1024)
	{
		dwKB = wParam / 1024;
		str.Format("(%ldKB/%ldKB)",lParam/1024, wParam/1024);
	}
	else
	{
		dwKB = wParam;
		str.Format("(%ldbytes/%ldbytes)", lParam, wParam);
	}
	
	float percentage = (float)((lParam*1.0 / wParam*1.0) * 100.);
	c_FileProg.SetPos((int)percentage);

	SetDlgItemText(IDC_STATIC_FILE_BYTE,str);
	
}

//茄 辑滚俊 措茄 颇老傈价 场车阑锭.. (DLL 郴何 钮俊 颇老捞 歹捞惑 巢酒乐瘤 臼阑锭.) 皋技瘤甫 罐酒 龋免登绰 勤甸矾..
void CTransferProgDlg::OnAllTransferComplete(WPARAM wParam, LPARAM lParam)
{
	wParam;lParam;
	
	if(m_bCancel)	return;
	//g_pFt->CloseClientSocket();
	m_nSendedServerCount++;
	c_ServerProg.SetPos(m_nSendedServerCount);
	
	
	CString name[4];
	for(int i=0; i<4; i++)
	{
		//CString ExeFile = m_pDoc->m_szServerFile[ type ].Right( m_pDoc->m_szServerFile[ type ].GetLength() - m_pDoc->m_szServerFile[ type ].ReverseFind('\\') - 1);
		name[i] = m_pApp->m_szServerFile[ m_nCurServerSet ][i].Right( m_pApp->m_szServerFile[ m_nCurServerSet ][i].GetLength()
					- m_pApp->m_szServerFile[ m_nCurServerSet ][i].ReverseFind('\\') - 1);
	}


	char packet[1024];
	int offset = 3;
	packet[0] = PTCL_RM;
	packet[1] = MSG_RM_COPY_FILE;
	
	packet[2] = (char)name[0].GetLength();	
	memcpy(packet + offset, name[0], name[0].GetLength());
	offset += name[0].GetLength();

	packet[ offset ] = (char)name[1].GetLength();	offset += 1;
	memcpy(packet + offset, name[1], name[1].GetLength());
	offset += name[1].GetLength();

	packet[ offset ] = (char)name[2].GetLength(); offset += 1;
	memcpy(packet + offset, name[2], name[2].GetLength());
	offset += name[2].GetLength();

	packet[ offset ] = (char)name[3].GetLength(); offset += 1;
	memcpy(packet + offset, name[3], name[3].GetLength());
	offset += name[3].GetLength();


	//瘤陛 颇老阑 罐篮 Listener俊霸 exe颇老阑 阿 弃歹肺 Copy窍扼绰 皋技瘤甫 朝妨霖促. 
	//PACKET_FILE_COPY packet( m_szCopyFile.GetBuffer( m_szCopyFile.GetLength() ) );
	//g_pFt->Send((char*)&packet, packet.GetPacketSize());
	g_pFt->Send((char*)packet, (BYTE)offset);
	
	if(m_nDropFileCount == m_nSendedServerCount)		//葛电 辑滚俊 促 焊陈阑 版快 
	{
		CString str;
		str.Format("All %dFile Transfer To Server! (%d/%d)",m_nDropFileCount,m_nSendedServerCount, m_nDropFileCount);
		SetDlgItemText(IDC_STATIC_SERVER,str);
		
		MessageBox("Complete to File Transfer","Transfer Completed");

#ifdef RM_LOG_MODE	//ddd
//	CServerView* pView = (CServerView*)GetParent();
	str.Format("ServerPatch :: [by INI]01. Transfer Ini Files and Folder!(Applied: %d server)",m_nSendedServerCount);
	m_pApp->LogServer(m_nCurServerSet,str);

	str.Format("ServerPatch :: [by INI]02. Send File Copy Message!(%s, %s, %s, %s)",name[0],name[1],name[2],name[3]);
	m_pApp->LogServer(m_nCurServerSet,str);

#endif

		CloseDialog();
	}
	else 
	{
		g_pFt->CloseClientSocket();
		ConnectAndStartTransfer();
	}
}

void CTransferProgDlg::SetProgressMode(int mode)
{
	mode;
	//归弊扼款靛 祸彬 瘤沥..
	c_ServerProg.SetBkColor(RGB(228,228,228));
	c_TotalProg.SetBkColor(RGB(228,228,228));
	c_FileProg.SetBkColor(RGB(228,228,228));

	c_ServerProg.SetGradientColors(RGB(0,109,255),RGB(0,0,62)/*RGB(128,0,255)*/);
	c_TotalProg.SetGradientColors(RGB(0,109,255),RGB(0,0,62)/*RGB(128,0,255)*/);
	c_FileProg.SetGradientColors(RGB(0,109,255),RGB(0,0,62)/*RGB(128,0,255)*/);

	//Progress Bar 焊歹 咯归 炼辆 
	CRect rect(1,1,1,1);
	c_TotalProg.SetBorders(&rect);
	c_FileProg.SetBorders(&rect);
	c_ServerProg.SetBorders(&rect);
	
	//Percentage Mode 悸泼 
	c_FileProg.SetShowPercent(TRUE);		
	c_TotalProg.SetShowPercent(TRUE);
	c_ServerProg.SetShowPercent(TRUE);

	c_FileProg.SetRange(0,100);
}

void CTransferProgDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
	CDialog::OnLButtonDown(nFlags, point);
}

BOOL CTransferProgDlg::ConnectAndStartTransfer()
{
	
	//InitDialog俊辑 霉锅掳 弃歹疙阑 罐酒客 弊 救俊 乐绰 颇老甸阑 葛滴促 Add 矫虐绊..
	//颇老 傈价 胶鸥飘甫 矫难 焊磊..
	POSITION pos = m_PathList.GetHeadPosition();

	if(pos == NULL)
		return FALSE;	//List is Empty!!

	CString path = m_PathList.GetAt(pos);			//府胶飘狼 霉锅掳俊 乐绰 菩胶甫 罐酒坷绊..

	//ReadRoot 悸泼 
	g_pFt->SetReadRoot(path.GetBuffer(path.GetLength()));

	//弃歹 郴俊 乐绰 颇老甸阑 Add窍绊 ini颇老 俊辑 佬绢靛赴 IP客 器飘锅龋啊 糕滚 函荐俊 悸泼等促. 
	if(!AddFolder(path))	
	{
		AfxMessageBox("Can not add folder!");
		CloseDialog();
		return FALSE;
	}

	c_TotalProg.SetRange(0, (short)m_nCurFolderFileNum);	//颇老 肮荐 唱鸥郴绰 橇肺弊饭胶官狼 MAX蔼 汲沥 
	c_ServerProg.SetRange(0, (short)m_nDropFileCount);		//醚 割俺狼 辑滚俊 颇老阑 焊尘巴牢瘤甫 悸泼 			
	

	//弃歹救狼 ini 颇老俊 乐带 林家肺 立加..
	if(!g_pFt->Connect(m_szConIp, RMTOOL_CONNECT_PORT ))
	{
		CString str;
		str.Format("Can not connect server! IP: %s",m_szConIp);
		AfxMessageBox(str);
		CloseDialog();
		return FALSE;
	}

	CString str;
	str.Format("(%s) Server  Sending Files... (%d/%d)",m_szConIp ,m_nSendedServerCount, m_nDropFileCount);
	SetDlgItemText(IDC_STATIC_SERVER,str);
	m_PathList.RemoveAt(pos);			//窍唱 佬绢甸看栏搁 瘤况具瘤.. 付摹 钮贸烦 荤侩窍扁 困茄..
	
	//促款肺靛 版肺 嘎苗林绊..
	CString szTemp, szTemp2;
	szTemp = m_pApp->m_szDownloadPath[ m_nCurServerSet ];
	szTemp2 = szTemp.Mid(3);

	PACKET_SET_DOWNLOAD_PATH packet(szTemp.GetAt(0), szTemp2.GetBuffer( szTemp2.GetLength() ));
	g_pFt->Send((char*)&packet, (unsigned short)packet.GetPacketSize());
	//
	
	g_pFt->StartTransfer();				//窍唱狼 辑滚俊 措茄 颇老 傈价 Start

	return TRUE;
}

void CTransferProgDlg::CloseDialog()
{
	g_pFt->ClearFileQueue();
	g_pFt->CloseClientSocket();
	EndDialog(IDOK);
}

void CTransferProgDlg::OnOK() 
{
	// TODO: Add extra validation here
	CloseDialog();
	m_bCancel = TRUE;
	//CDialog::OnOK();
}

BOOL CTransferProgDlg::IsFile(CString path)
{
	CFileFind finder;
	BOOL bWorking = finder.FindFile(path);

	if(bWorking)
	{
		finder.FindNextFile();
		if(!finder.IsDirectory() && !finder.IsDots())	//角青颇老 老锭 
		{
			return TRUE;
		}
		finder.Close();
	}

	return FALSE;
}


BOOL CTransferProgDlg::TransferExeFile()
{
	
	//g_pFt->SetReadRoot("D:\\ini");
	g_pFt->SetReadRoot(m_pApp->m_szIniMakePath.GetBuffer( m_pApp->m_szIniMakePath.GetLength() ));
	char szIP[ 16 ];
	sprintf(szIP, "%s",m_pApp->m_szGameServerDataIp);

	POSITION pos;

	while(1)
	{
		pos = m_ExeList.GetHeadPosition();

		if(pos == NULL)
			break;		//List is Empty!!

		CString path = m_ExeList.GetAt(pos);			//府胶飘狼 霉锅掳俊 乐绰 菩胶甫 罐酒坷绊..
		
		g_pFt->AddFile(path.GetBuffer( path.GetLength() ),FALSE);
		m_ExeList.RemoveAt(pos);
	}

	//秦寸 府胶呈俊 立加茄促.
	if(!g_pFt->Connect(szIP, RMTOOL_CONNECT_PORT ))			//立加 
	{
		CString str;
		str.Format("Can not connect server! IP: %s",szIP);
		AfxMessageBox(str);
		CloseDialog();
		return FALSE;
	}

	CString szTemp, szTemp2;
	szTemp = m_pApp->m_szUploadPath;
	
	szTemp2 = szTemp.Mid(3);


	//快急 绢叼俊辑 绢恫 颇老阑 促款罐阑瘤 府胶呈俊 焊辰促. 
	PACKET_SET_DOWNLOAD_PATH packet(szTemp.GetAt(0), szTemp2.GetBuffer( szTemp2.GetLength() ));
	g_pNet->Send(m_pApp->m_nCI[ m_nCurServerSet ], (char*)&packet, packet.GetPacketSize());

//	PACKET_SET_TEMP_DOWNLOAD_PATH packet('D',"ServerExec");
//	g_pFt->Send((char*)&packet, packet.GetPacketSize());

	g_pFt->StartTransfer();
	
	return TRUE;
}

⌨️ 快捷键说明

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