// Welcome.cpp : implementation file
//

#include "stdafx.h"
#include "ylgl.h"
#include "Welcome.h"


/////////////////////////////////////////////////////////////////////////////
// Welcome dialog
Welcome::Welcome(CWnd* pParent /*=NULL*/)
: CDialog(Welcome::IDD, pParent)
{
	//{{AFX_DATA_INIT(Welcome)
	// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_pBk = NULL;
	g_bNoConnDlg = 1;
	m_bFirst = 1;
}

void Welcome::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Welcome)
	// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Welcome, CDialog)
	//{{AFX_MSG_MAP(Welcome)
	ON_WM_PAINT()
	ON_WM_DESTROY()
	ON_WM_ERASEBKGND()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Welcome message handlers
BOOL Welcome::OnEraseBkgnd(CDC* pDC)
{
	// TODO: Add your message handler code here and/or call default
	if (m_pBk)
	{
		Graphics graph(pDC->GetSafeHdc());
		CRect rc;
		GetClientRect(rc);
		Rect destinationRect(0, 0, rc.Width(), rc.Height());
		graph.DrawImage(m_pBk, destinationRect, rc.left, rc.top, rc.Width(), rc.Height(), UnitPixel);
	}
	if (m_bFirst)
	{
		m_bFirst = 0;
		m_nticks = ::GetTickCount();
		SetTimer(1, 10, NULL);
	}
	return 1;
}

void Welcome::OnCancel()
{
	// TODO: Add extra cleanup here
}

void Welcome::OnOK()
{
	// TODO: Add extra validation here
}

void Welcome::OnPaint()
{
	CPaintDC dc(this); // device context for painting

	// TODO: Add your message handler code here
	if (m_pBk)
	{
		Graphics graph(dc.GetSafeHdc());
		CRect rc;
		GetClientRect(rc);
		Rect destinationRect(0, 0, rc.Width(), rc.Height());
		graph.DrawImage(m_pBk, destinationRect, rc.left, rc.top, rc.Width(), rc.Height(), UnitPixel);
	}
	if (m_bFirst)
	{
		m_bFirst = 0;
		m_nticks = ::GetTickCount();
		SetTimer(1, 10, NULL);
	}
	// Do not call CDialog::OnPaint() for painting messages
}

void Welcome::OnDestroy()
{
	// TODO: Add your message handler code here
	if (m_pBk)
		delete m_pBk;
	g_bNoConnDlg = 0;
	CDialog::OnDestroy();
}

extern void SaveImageToFile(Image *img, CString path);
BOOL Welcome::OnInitDialog()
{
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
	CString picdir = g_mainpath + "\\ͼƬ\\";
	if (g_bRedSkin)
		picdir = g_mainpath + "\\ͼƬ-��ɫ���\\";
	//MessageBox(picdir+"��ӭ.jpg");

	// .Jeff���ػ�ӭͼƬ,��Ϊ��ӭ����;
	if (::PathFileExists(picdir + "��ӭ.jpg") == 0)
	{
		if (0)//::PathFileExists (g_mainpath+"\\zx.dll"))
		{
			HINSTANCE hinst = ::LoadLibrary(g_mainpath + "\\zx.dll");
			if (hinst == NULL)
			{
				::LoadImageFromRes(&m_pBk, MAKEINTRESOURCE(IDR_JPG4), "JPG");
			}
			else
			{
				AfxSetResourceHandle(hinst);
				::LoadImageFromRes(&m_pBk, MAKEINTRESOURCE(2009), "ZX");
				AfxSetResourceHandle(AfxGetInstanceHandle());
				FreeLibrary(hinst);
			}
		}
		else if (::PathFileExists(g_mainpath + "\\zwj.dll"))
		{
			HINSTANCE hinst = ::LoadLibrary(g_mainpath + "\\zwj.dll");
			if (hinst == NULL)
			{
				::LoadImageFromRes(&m_pBk, MAKEINTRESOURCE(IDR_JPG4), "JPG");
			}
			else
			{
				AfxSetResourceHandle(hinst);
				::LoadImageFromRes(&m_pBk, MAKEINTRESOURCE(2009), "ZWJ");
				AfxSetResourceHandle(AfxGetInstanceHandle());
				FreeLibrary(hinst);
			}
		}
		else
			::LoadImageFromRes(&m_pBk, MAKEINTRESOURCE(IDR_JPG4), "JPG");
	}
	else
		::LoadImageFromBuf(&m_pBk, picdir + "��ӭ.jpg");

	if (m_pBk)
	{
		CRect rc;
		GetWindowRect(rc);
		rc.right = rc.left + m_pBk->GetWidth();
		rc.bottom = rc.top + m_pBk->GetHeight();
		MoveWindow(rc);
		CenterWindow();

		// ���ð汾��;
		CString str;
		str.Format("%02d%02d", g_arrFileVersion[2], g_arrFileVersion[3]);

		Graphics graph(m_pBk);

		StringFormat format;
		format.SetAlignment(StringAlignmentNear);
		RectF layoutRect(325, 161, 59, 15);

		SolidBrush *Brush = new SolidBrush(Color(255, 255, 255, 255));
		int leng = str.GetLength();
		BSTR bstr = str.AllocSysString();
		Gdiplus::Font  *g_TimerFont;
		g_TimerFont = new Gdiplus::Font(L"����", 16);
		graph.SetTextRenderingHint(TextRenderingHintAntiAlias);

		graph.DrawString(
			bstr,
			leng,
			g_TimerFont,
			layoutRect,
			&format,
			Brush);

		delete Brush;
		delete g_TimerFont;
		SysFreeString(bstr);
	}

	::AnimateWindow(GetSafeHwnd(), 300, AW_BLEND);

	SetTimer(2, 1000, NULL);
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

//extern int g_conntype;
CString GetFileSize(CString path)
{
	CString str = "0";
	try
	{
		CFile fp;
		fp.Open(path, CFile::modeRead);
		str.Format("%d", fp.GetLength());
		fp.Close();
	}
	catch (...)
	{
	}
	return str;
}

void Welcome::OnTimer(UINT nIDEvent)
{
	if (nIDEvent == 1)
	{
		int i = 0;
		KillTimer(1);
		if (g_bGenBranchData)
		{
			WriteTextLog("�����ֵ����");
			// 1.Jeff.��ȡ�洢�ڱ��ط�����Ŀ¼�µ�branchinfo.dat�ļ�����;
			CArray<CStringArray, CStringArray>brancharray;
			g_sendhead.bsql = 0;
			g_sendhead.code[0] = 152;	// Jeff.152��ȡDBServer.exe����Ŀ¼��branchinfo.dat�ﱣ��ķֵ�����;
			g_sendhead.tabcount = 1;
			g_pMainWnd->ProcessChatMessageRequest2(1);
			if (g_bSendOK == 0)//Jeff.ͨ��ʧ��;
			{
				exit(0);
				return;
			}
			DataToArray(&brancharray);

			// 2.Jeff.��branchinfo.dat���ж�ҷֵ���Ϣ,�����ȫ���ֵ���Ϣ;
			CString branch, domain;
			CArray<CStringArray, CStringArray>tagList1array;

			// ͨ����g_branchip��g_branchname��g_bBranchModify������ֵ,˳�����ӷֵ�,��ȡȫ���ֵ������ȡ������ʷ����;
			// Ȼ���ٽ���Щ����ȫ�����浽����tagList1array��,����DBServer.exe������branchdindan.dat�ļ���
			for ( i = -1; i < brancharray.GetSize() - 1; i++)
			{
				//printf("Jeff:branchinfo.dat�ֵ�����=%d,i=%d\n\n",brancharray.GetSize(),i);
				if (i != -1)
				{
					WriteTextLog("ֻ�е���,�޷ֵ�");
					domain = brancharray.ElementAt(i).ElementAt(2);		// Jeff.�����*.ly.com��Ϣ;
					branch = brancharray.ElementAt(i).ElementAt(0);		// Jeff.������Ϊ�ֵ������;
					g_branchip = brancharray.ElementAt(i).ElementAt(1);	// Jeff.��������IP��ַ;
					g_pMainWnd->OnDisconnect();
					g_branchname = branch;
					g_bBranchModify = 1;
				}
				else
				{
					domain = brancharray.ElementAt(brancharray.GetSize() - 1).ElementAt(2);
					branch = brancharray.ElementAt(brancharray.GetSize() - 1).ElementAt(0);
				}

				// 2.1.��ȡ�������ݿ��dindan����Ϣ:�����š�ȡ��ʱ��, ���͵������������;
				// ����������Ὣ��Щ��Ϣ�洢�ڷ���Ŀ¼��branchdindan.dat�ļ���;
				// 
				CString filter = "[status3]='OK' and [time5] is not null and [time5]<>''";
				g_sendhead.bsql = 0;
				g_sendhead.code[0] = 231;	// Jeff.case 231->��ȡdb���ݿ��Լ�������ʷ���ݿ��������ȡ���Ķ���;
				g_sendhead.tabcount = 1;
				g_pMainWnd->ProcessChatMessageRequest2(filter);
				if (g_bSendOK == 0)continue;

				CArray<CStringArray, CStringArray>List1array;
				DataToArray(&List1array);
				int size = tagList1array.GetSize();
				for (int j = 0; j < List1array.GetSize(); j++)
				{
					size++;
					tagList1array.SetSize(size, 1);
					size--;
					tagList1array.ElementAt(size).Copy(List1array.ElementAt(j));
					tagList1array.ElementAt(size).InsertAt(0, domain);	// Jeff.*.ly.com
					size++;
				}
			}
			g_pMainWnd->OnDisconnect();
			g_bBranchModify = 0;
			g_branchip = g_branchname = "";

			// 3.��domain�������š�ȡ��ʱ�� �洢��tagList1array;
			// �洢���ڴ���,���͵�������������,�ɷ���������branchdindan.dat�ļ���,����;
			CMemFile memfile;
			CArchive ar(&memfile, CArchive::store);
			for (int ii = 0; ii < tagList1array.GetSize(); ii++)
			{
				tagList1array.ElementAt(ii).Serialize(ar);
			}
			ar.Close();
			int length = memfile.GetLength();
			BYTE *pData = memfile.Detach();
			int size = tagList1array.GetSize();
			BYTE *pData2 = new BYTE[length + sizeof(int)];
			memcpy(pData2, pData, length);
			memcpy(pData2 + length, &size, sizeof(int));
			delete[]pData;
			length += sizeof(int);
			g_nSendCode = 41;	// dwToUserID==41 ���� branchdindan.dat �ļ�;
			g_pMainWnd->ProcessChatMessageRequest2(pData2, length);
			g_nSendCode = 0;
			delete[]pData2;

			exit(0);
			return;
		}

		BOOL bSuccess = 1;
		CStringArray filesarray;
		filesarray.Add("AutoUpdate.exe");			// 1.
		filesarray.Add("skin\\1.lia");				// 2.
		filesarray.Add("skin\\2.lia");				// 3.
		filesarray.Add("skin\\3.lia");				// 4.
		filesarray.Add("skin\\4.lia");				// 5.
		filesarray.Add("skin\\5.lia");				// 6.
		filesarray.Add("skin\\10.lia");			// 7.
		filesarray.Add("skin\\5-red.lia");			// 8.
		filesarray.Add("skin\\10-red.lia");		// 9.
		filesarray.Add("ͼƬ\\logo.jpg");			// 10.
		filesarray.Add("ͼƬ\\����-ѡƬ.jpg");		// 11.
		filesarray.Add("ͼƬ\\����-�����.jpg");	// 12.	
		filesarray.Add("ͼƬ\\ѡƬ.jpg");			// 13.
		filesarray.Add("ͼƬ\\�����.jpg");		// 14.
		filesarray.Add("ͼƬ\\��ӭ.jpg");			// 15.
		filesarray.Add("ͼƬ\\����.jpg");			// 16.
		filesarray.Add("ͼƬ\\����.jpg");			// 17.
		filesarray.Add("ͼƬ\\����.jpg");			// 18.
		filesarray.Add("ͼƬ-��ɫ���\\��ӭ.jpg");	// 19.
		filesarray.Add("ͼƬ-��ɫ���\\����.jpg");	// 20.
		filesarray.Add("ͼƬ-��ɫ���\\����.jpg");	// 21.
		filesarray.Add("ͼƬ-��ɫ���\\����.jpg");	// 22.
		filesarray.Add("skin\\6.lia");				// 23.
		filesarray.Add("ͼƬ\\���б�.jpg");		// 24.
		filesarray.Add("regsvr32.exe");			// 25.

		// Jeff.������Ŀ¼��û��MSCHRT20.OCXʱ,������ʱ�ж��Ƿ�����ļ�,����������ݿ�����;
		filesarray.Add("MSCHRT20.OCX");			// 26.	// Jeff.2014.09.06.����MSCHRT20.OCX,�ɷ���������;

		::CreateDirectory(g_mainpath + "\\skin", NULL);
		::CreateDirectory(g_mainpath + "\\ͼƬ", NULL);
		::CreateDirectory(g_mainpath + "\\ͼƬ-��ɫ���", NULL);

		// 1.Jeff.array������������,ǰ�벿�ֱ������ļ�·����,��벿�ֱ������ϰ벿���ļ��Ĵ�С;
		CStringArray array;
		array.Copy(filesarray);
		for ( i = 0; i < filesarray.GetSize(); i++)
		{
			array.Add(GetFileSize(g_mainpath + "\\" + filesarray.ElementAt(i)));;
		}

		// 2.��array���ڴ��ļ�����,��Ϊ����������������ͨ��;
		{
			CMemFile memfile;
			CArchive ar(&memfile, CArchive::store);
			array.Serialize(ar);
			ar.Close();
			DWORD length = memfile.GetLength();
			BYTE *pData = memfile.Detach();
#if 0 // Jeff.ԭ
ll:	g_nSendCode=211;//Jeff.�Ѿ�û�õ����goto��;
#else
			g_nSendCode = 211;//g_nSendCode=211: ���� \�����\skin\ �ļ����µĴ�С������ļ����ͻ���ȥ;
#endif
			//printf("Jeff:welcome�����211\n\n");//Jeff Printf;
			g_pMainWnd->ProcessChatMessageRequest2(pData, length);
			//printf("Jeff:welcome1111�����211\n\n");//Jeff Printf;
			if (g_bSendOK == 0)
			{ //AfxMessageBox("2");
				//printf("Jeff:welcome�ļ�����ʧ��\n\n");//Jeff Printf;
				exit(0);
				return;
			}

			//printf("Jeff:welcome�ļ����³ɹ�\n\n");//Jeff Printf;
			g_nSendCode = 0;
			delete[]pData;
			if (g_bSendOK == 0)	// Jeff.ǰ�涼exit��return��,���滹����ô????
			{
				bSuccess = 0;
				CDialog::OnCancel();
				g_pMainWnd->m_pMainFrimDlg2 = new MainFrimDlg2;
				g_pMainWnd->m_pMainFrimDlg2->SetLiaPath("10.lia");

				// Jeff.remak.2014.06.26
				// MainFrimDlg2::Create������MyDlg::OnInitDialog(),���ŵ���LoadLia()
				// LoadLia()�ٵ���GetPos(),GetPost()������ProcessChatMessageRequest2:code[0]=105
				g_pMainWnd->m_pMainFrimDlg2->Create(IDD_DLGmydlg, g_pMainWnd);
				return;
			}
		}

		//printf("Jeff:welcome1112323232323232323\n\n");//Jeff Printf;
		// Jeff.g_pData2�ﱣ����Ǹ��µ�����;
		BYTE *pData[40] = { NULL };
		DWORD nDataLeng[40] = { 0 };
		BYTE *pSumData = g_pData2;
		DWORD sumleng = g_nLeng2;

		//printf("Jeff:sumleng=%d,g_pData2=%d\n\n",sumleng,g_pData2);//Jeff Printf;
		CStringArray filedatearray;
		DWORD nArrayLength;
		memcpy(&nArrayLength, pSumData, sizeof(DWORD));
		CMemFile memfile;
		memfile.Attach(pSumData + sizeof(DWORD), nArrayLength);
		CArchive ar(&memfile, CArchive::load);
		filedatearray.Serialize(ar);
		ar.Close();
		memfile.Detach();

		//printf("Jeff:welcome1112323232323232323\n\n");//Jeff Printf;

		// Jeff.
		DWORD bytesread = 0;
		DWORD a;
		int pos = 0;
		CString stime;
		//printf("Jeff:welcome11111111111111\n\n");//Jeff Printf;
		for (i = 0; i < 40; i++)
		{
			memcpy(&a, pSumData + sizeof(DWORD)*i + nArrayLength + sizeof(DWORD), sizeof(DWORD));
			nDataLeng[i] = a;
			if (a)
			{
				//if( i == 25 ) printf("Jeff:%s\n\n",g_mainpath+"\\"+filesarray.ElementAt(i));
				CFile fp;
				if (fp.Open(g_mainpath + "\\" + filesarray.ElementAt(i), CFile::modeCreate | CFile::modeWrite))
				{
					fp.Write(pSumData + sizeof(DWORD) * 40 + bytesread + nArrayLength + sizeof(DWORD), a);
					bytesread += a;
					fp.Close();
					stime = filedatearray.ElementAt(pos);
					pos++;

					if (i == 25)
					{
						CString temp;
						temp.Format("%s\\MSCHRT20.OCX", g_mainpath);
						RegisterOcx(temp);
					}
				}
				else
				{
					bSuccess = 0;
					break;
				}
			}
		}

		//if(  g_server.Find ("192.168.10.")!=-1 )::Sleep(3000);
		if (g_pData2)
			delete[]g_pData2;
		g_pData2 = NULL;

		g_pMainWnd->m_pMainFrimDlg2 = new MainFrimDlg2;
		g_pMainWnd->m_pMainFrimDlg2->SetLiaPath("10.lia");


		//printf("Jeff:welcome��ȡ case 218 client��\n\n");
		// Jeff.remak.2014.06.26
		// MainFrimDlg2::Create������MyDlg::OnInitDialog(),���ŵ���LoadLia()
		// LoadLia()�ٵ���GetPos(),GetPost()������ProcessChatMessageRequest2:code[0]=105
		// case 105:����;
		// case 218:client��;
		g_pMainWnd->m_pMainFrimDlg2->Create(IDD_DLGmydlg, g_pMainWnd);
		g_sendhead.bsql = 0;
		//	AfxMessageBox("6");
		g_sendhead.code[0] = 218;
		g_sendhead.tabcount = 1;
		//	if(  g_server.Find ("192.168.10.")!=-1 )::Sleep(3000);
		g_pMainWnd->ProcessChatMessageRequest2(1);

		if (g_bSendOK == 0)
		{ //AfxMessageBox("7");
			exit(0);
			return;
		}
		//AfxMessageBox("8");
		DataToArray(&g_oldclientarray);


		if (::GetTickCount() - m_nticks < 2000)
			::Sleep(2000 - (::GetTickCount() - m_nticks));
		CDialog::OnCancel();
	}
	else if (nIDEvent == 0)
	{
		CRect dlgRect;
		CRect DesktopRect;
		GetWindowRect(dlgRect);
		GetDesktopWindow()->GetWindowRect(DesktopRect);

		if (dlgRect.Width() >= (dlgWidth - dlgDx)) dlgDx = dlgWidth - dlgRect.Width();
		if (dlgRect.Height() >= (dlgHeight - dlgDy)) dlgDy = dlgHeight - dlgRect.Height();
		MoveWindow
			(
			(-dlgDx + DesktopRect.Width() - dlgRect.Width()) / 2,
			(-dlgDy + DesktopRect.Height() - dlgRect.Height()) / 2,
			+dlgDx + dlgRect.Width(),
			+dlgDy + dlgRect.Height()
			);
		if ((dlgRect.Width() >= (dlgWidth - dlgDx)) && (dlgRect.Height() >= (dlgHeight - dlgDy)))
			::KillTimer(this->m_hWnd, 0);
	}
	else if (nIDEvent == 2)
	{
		//printf("Jeff:����Welcome�Ի���");
		KillTimer(2);
		CDialog::OnCancel();
	}
}