// stdafx.cpp : ֻ������׼�����ļ���Դ�ļ�
// PutOutBinary.pch ����ΪԤ����ͷ
// stdafx.obj ������Ԥ����������Ϣ

#include "stdafx.h"
#include <locale.h>

#define DB_SS_CONN_WITH_PORT		_T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s")
#define DB_SS_CONN_WITHOUT_PORT		_T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s")
#define DB_SS_CONN_WITHOUT_PORT2	_T("driver={SQL Server};Server=%s;database=%d;uid=%s;pwd=%s")
#define DB_SW_CONN_WITH_PORT		_T("Driver={SQL Server};Server=%s,%d;Database=%s;Trusted_Connection=yes;")
#define DB_SW_CONN_WITHOUT_PORT		_T("Driver={SQL Server};Server=%s;Database=%s;Trusted_Connection=yes;")
#define DB_SW_CONN_WITHOUT_PORT2	_T("Driver={SQL Server};Server=%s;Database=%d;Trusted_Connection=yes;")

//////////////////////////////////////////////////////////////////////////
// ȫ�ֱ���: 
TCHAR g_szIniFile[MAX_PATH] = {0};
TCHAR g_szModulePath[MAX_PATH] = { 0 };
TCHAR g_szModuleFileName[MAX_PATH] = { 0 };
TCHAR g_szDBSource[MAX_PATH] = {0};
TCHAR g_szDBAccount[MAX_PATH] = { 0 };
TCHAR g_szDBPassWord[MAX_PATH] = { 0 };
TCHAR g_szDBName[MAX_PATH] = { 0 };
TCHAR g_szConnectString[MAX_PATH] = {0};

DWORD g_dwDBServerPort = 0;

/************************************************************************/
/*  ������[8/31/2017 IT];
/*  ������;
/*  ������;
/*  	[IN] ��;
/*  	[OUT] ��;
/*  	[IN/OUT] ��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
int GetSysIniInfo(const TCHAR *szPath, const TCHAR *szIniName)
{
	TCHAR szDrive[_MAX_DRIVE] = { 0 };
	TCHAR szDir[_MAX_DIR] = { 0 };
	TCHAR szFName[_MAX_FNAME] = { 0 };
	TCHAR szExt[_MAX_EXT] = { 0 };
	::GetModuleFileName(NULL, g_szModulePath, sizeof(g_szModulePath) / sizeof(TCHAR));
	_stprintf_s(g_szModulePath, MAX_PATH, _T("%s"), g_szModulePath);

	_tsplitpath_s(g_szModulePath, szDrive, szDir, szFName, szExt);
	_tcscpy_s(g_szModulePath, szDrive);
	_tcscat_s(g_szModulePath, szDir);

	if (szPath != NULL && szIniName != NULL)
		_stprintf_s(g_szIniFile, _T("%s%s"), szPath, szIniName);
	else
		_stprintf_s(g_szIniFile, _T("%sDatabase.ini"), g_szModulePath);

	HANDLE hFile = CreateFile(g_szIniFile, 0/*GENERIC_READ*/, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (ERROR_FILE_NOT_FOUND == GetLastError())
	{
		return -1;
	}
	CloseHandle(hFile);

	// ��ȡ����������Ϣ;
	GetPrivateProfileString(_T("DatabaseInfo"), _T("dbSource"), _T(""), g_szDBSource, MAX_PATH, g_szIniFile);
	g_dwDBServerPort = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbServerPort"), 0, g_szIniFile);
	GetPrivateProfileString(_T("DatabaseInfo"), _T("dbAccount"), _T(""), g_szDBAccount, MAX_PATH, g_szIniFile);
	GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, g_szIniFile);
	GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, g_szIniFile);


	if (g_dwDBServerPort != 0)
	{
		if (_tcscmp(g_szDBAccount, _T("")) == 0)
			_stprintf_s(g_szConnectString, DB_SW_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort, g_szDBName);
		else
			_stprintf_s(g_szConnectString, DB_SS_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord);
	}
	else
	{
		if (_tcscmp(g_szDBAccount, _T("")) == 0)
			_stprintf_s(g_szConnectString, DB_SW_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName);
		else
			_stprintf_s(g_szConnectString, DB_SS_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord);
	}

	return 0;
}

/************************************************************************/
/*  ������WriteTextLog[7/28/2016 IT];
/*  ������д�ı���־;
/*  ������;
/*  	[IN] ��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
void WriteTextLog(const TCHAR *format, ...)
{
	try
	{
		//static ThreadSection _critSection;
		//AutoThreadSection aSection(&_critSection);
		// ��������־·��;
		TCHAR szlogpath[MAX_PATH] = { 0 };
		static TCHAR szModulePath[MAX_PATH] = { 0 };
		static TCHAR szFna[_MAX_DIR] = { 0 };
		if (szModulePath[0] == _T('\0'))
		{
			TCHAR szDrive[_MAX_DRIVE] = { 0 };
			TCHAR szDir[_MAX_DIR] = { 0 };
			TCHAR szExt[_MAX_DIR] = { 0 };
			::GetModuleFileName(NULL, szModulePath, sizeof(szModulePath) / sizeof(TCHAR));
			_tsplitpath_s(szModulePath, szDrive, szDir, szFna, szExt);
			_tcscpy_s(szModulePath, szDrive);
			_tcscat_s(szModulePath, szDir);
		}

		_stprintf_s(szlogpath, _T("%s%s%s.txt"), szModulePath, szFna, CTime::GetCurrentTime().Format("[%Y-%m-%d]"));

		// �򿪻򴴽��ļ�;
		CStdioFile fp;
		if (PathFileExists(szlogpath))
		{
			if (fp.Open(szlogpath, CFile::modeWrite) == FALSE)
			{
				return;
			}
			fp.SeekToEnd();
		}
		else
		{
			if (!fp.Open(szlogpath, CFile::modeCreate | CFile::modeWrite))
				return;
		}

		// ��ʽ��ǰ������������;
		TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
		_tsetlocale(LC_CTYPE, _T("chs"));//�趨����;

										 // ��ʽ����־����;
		va_list		args = NULL;
		int			len = 0;
		TCHAR		*buffer = NULL;
		va_start(args, format);
		// _vscprintf doesn't count. terminating '\0'
		len = _vsctprintf_p(format, args);
		if (len == -1)
		{
			goto clear;
		}

		len++;
		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
		_vstprintf_s(buffer, len, format, args); // C4996
												 // Note: vsprintf is deprecated; consider using vsprintf_s instead

												 // ����־�������뵽�ļ���;
		//fp.WriteString(CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S ")));
		fp.WriteString(buffer);
		fp.WriteString(_T("\n"));

		// �ر��ļ����ͷ���Դ�����û�ԭ��������;
		free(buffer);
	clear:
		_tsetlocale(LC_CTYPE, old_locale);
		free(old_locale);//��ԭ�����趨;
		fp.Close();
	}
	catch (CException *e)
	{
		e->ReportError();
		e->Delete();
	}
}