Forráskód Böngészése

1、新增WriteTextLog函数;
2、添加打印日志;

scbc.sat2 5 éve
szülő
commit
d49c162bc5

+ 76 - 10
SATService/SATService/Global.cpp

@@ -28,10 +28,13 @@ namespace Global
 	// 全局变量;
 	TCHAR g_szIniFile[MAX_PATH] = {0};
 	TCHAR g_szHostName[MAX_PATH] = {0};			// 主机计算机名;
-	TCHAR g_szModulePath[MAX_PATH];				// 软件目录;
-	TCHAR g_szModuleFileName[MAX_PATH];			// 软件名称;
 	TCHAR g_szConnectString[MAX_PATH];			// DB连接串;
-	TCHAR g_szBranchId[MAX_PATH];				// 本店加密锁域名;
+
+	TCHAR g_szCurModuleFileName[MAX_PATH] = { 0 };			// 软件名称;
+	TCHAR g_szCurModuleDir[MAX_PATH] = { 0 };
+	TCHAR g_szCurModulePath[MAX_PATH] = { 0 };
+	TCHAR g_szFna[_MAX_FNAME] = { 0 };
+	TCHAR g_szExt[_MAX_EXT] = { 0 };
 
 	// 服务器信息;
 	TCHAR g_szDBSource[MAX_PATH];				// 数据库源(服务所在IP或计算机名);
@@ -56,6 +59,7 @@ namespace Global
 	//////////////////////////////////////////////////////////////////////////
 
 	ThreadSection g_critSection;
+	ThreadSection g_csTextLog;
 	//////////////////////////////////////////////////////////////////////////
 	static const int BEGIN_YEAR = 1901;
 	static const int NUMBER_YEAR = 199;
@@ -163,20 +167,20 @@ namespace Global
 	{
 		TCHAR szDrive[_MAX_DRIVE] = { 0 };
 		TCHAR szDir[_MAX_DIR] = { 0 };
-		TCHAR szFna[_MAX_DIR] = { 0 };
-		TCHAR szExt[_MAX_DIR] = { 0 };
-		DWORD dwRet = ::GetModuleFileName(NULL, g_szModuleFileName, sizeof(g_szModuleFileName) / sizeof(TCHAR));
+		TCHAR szFna[_MAX_FNAME] = { 0 };
+		TCHAR szExt[_MAX_EXT] = { 0 };
+		DWORD dwRet = ::GetModuleFileName(NULL, g_szCurModuleFileName, sizeof(g_szCurModuleFileName) / sizeof(TCHAR));
 
-		_tsplitpath_s(g_szModuleFileName, szDrive, szDir, szFna, szExt);
-		StringCchCat(g_szModulePath, MAX_PATH, szDrive);
-		StringCchCat(g_szModulePath, MAX_PATH, szDir);
+		_tsplitpath_s(g_szCurModuleFileName, szDrive, szDir, g_szFna, g_szExt);
+		StringCchCat(g_szCurModuleDir, MAX_PATH, szDrive);
+		StringCchCat(g_szCurModuleDir, MAX_PATH, szDir);
 
 		// -----------------------------------------------------//
 		TCHAR szIniPath[MAX_PATH] = {0};
 		if (szPath != NULL && szIniName != NULL)
 			StringCchPrintf(szIniPath, MAX_PATH, _T("%s%s"), szPath, szIniName);
 		else
-			StringCchPrintf(szIniPath, MAX_PATH, _T("%sSATService.ini"), g_szModulePath);
+			StringCchPrintf(szIniPath, MAX_PATH, _T("%sSATService.ini"), g_szCurModuleDir);
 
 		HANDLE hFile = CreateFile(szIniPath, 0/*GENERIC_READ*/, 0, NULL, OPEN_EXISTING, 0, NULL);
 
@@ -1049,6 +1053,68 @@ namespace Global
 		return true;
 	};
 
+	/************************************************************************/
+	/*  函数:WriteTextLog[7/28/2009 Jeff];
+	/*  描述:写文本日志;
+	/*  参数:;
+	/*  	[IN] :;
+	/*  返回:void;
+	/*  注意:;
+	/*  示例:;
+	/*
+	/*  修改:;
+	/*  日期:;
+	/*  内容:;
+	/************************************************************************/
+	void WriteTextLog(const TCHAR* format, ...)
+	{
+		AutoThreadSection aSection(&g_csTextLog);
+		// 解析出日志路径;
+		TCHAR szlogpath[MAX_PATH] = { 0 };
+		_stprintf_s(szlogpath, _T("%s%s.txt"), g_szCurModuleDir, g_szFna);
+		// 打开或创建文件;
+		FILE* fp = NULL;
+		if (_taccess(szlogpath, 0) != -1)
+		{// 存在;
+			if (0 == _tfopen_s(&fp, szlogpath, _T("a+")))
+				// 移动到末尾;
+				fseek(fp, 0, SEEK_END);
+		}
+		else
+		{// 不存在;
+			_tfopen_s(&fp, szlogpath, _T("w+"));
+		}
+
+		if (fp == NULL)
+			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(format, args) + 1;
+		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
+		_vstprintf_s(buffer, len, format, args);
+		// 将日志内容输入到文件中;
+		// 获取今年年份;
+		__time64_t gmt = time(NULL);// 获取当前日历时间(1900-01-01开始的Unix时间戳);
+		struct tm gmtm = { 0 };
+		localtime_s(&gmtm, &gmt); // 时间戳转成本地时间;
+		_ftprintf(fp, _T("%04d-%02d-%02d %02d:%02d:%02d %s\n"), gmtm.tm_year + 1990, gmtm.tm_mon + 1, gmtm.tm_mday, gmtm.tm_hour, gmtm.tm_min, gmtm.tm_sec, buffer);
+
+		// 关闭文件,释放资源并设置回原语言区域;
+		free(buffer);
+		fclose(fp);
+		_tsetlocale(LC_CTYPE, old_locale);
+		free(old_locale);//还原区域设定;
+	}
+
 	void WritePythonLog(LPCTSTR file, const TCHAR* msg)
 	{
 		AutoThreadSection aSection(&g_critSection);

+ 7 - 4
SATService/SATService/Global.h

@@ -70,10 +70,7 @@ namespace Global
 	//////////////////////////////////////////////////////////////////////////
 	extern TCHAR g_szIniFile[MAX_PATH];
 	extern TCHAR g_szHostName[MAX_PATH];			// 主机计算机名;
-	extern TCHAR g_szModulePath[MAX_PATH];			// 软件目录;
-	extern TCHAR g_szModuleFileName[MAX_PATH];		// 软件名称;
 	extern TCHAR g_szConnectString[MAX_PATH];		// DB连接串;
-	extern TCHAR g_szBranchId[MAX_PATH];			// 分店域名;
 
 	// 服务器信息;
 	extern TCHAR g_szDBSource[MAX_PATH];			// 数据库源(服务所在IP或计算机名);
@@ -83,7 +80,12 @@ namespace Global
 	extern TCHAR g_szDBPassWord[MAX_PATH];			// 数据库登录密码;
 	extern TCHAR g_szDBName[MAX_PATH];				// 数据库名称;	
 
-	extern CHAR g_szKeyPath[MAX_PATH];				// 加密狗USB位置;
+	extern TCHAR g_szCurModuleFileName[MAX_PATH];
+	extern TCHAR g_szCurModuleDir[MAX_PATH];
+	extern TCHAR g_szCurModulePath[MAX_PATH];
+	extern TCHAR g_szFna[_MAX_FNAME];
+	extern TCHAR g_szExt[_MAX_EXT];
+
 
 
 	//////////////////////////////////////////////////////////////////////////
@@ -167,6 +169,7 @@ namespace Global
 	extern void GetHostName();
 	// 创建目录;
 	bool MKDIR(LPCTSTR dir);
+	void WriteTextLog(const TCHAR* format, ...);
 	// 写脚本日志;
 	void WritePythonLog(LPCTSTR file, const TCHAR* msg);
 	// 获取本机IP地址;

+ 7 - 4
SATService/SATService/SATExecutor.cpp

@@ -148,6 +148,7 @@ bool CSATExecutor::Login(std::string user, std::string password, bool bLogin /*=
 #ifdef _DEBUG
 	OutputDebugString("登录成功\n");
 #endif
+		Global::WriteTextLog("登录成功");
 		m_bLogin = TRUE;
 		return true;
 	}
@@ -155,6 +156,7 @@ bool CSATExecutor::Login(std::string user, std::string password, bool bLogin /*=
 #ifdef _DEBUG
 	OutputDebugString("登录失败\n");
 #endif
+	Global::WriteTextLog("登录失败");
 
 	return false;
 }
@@ -828,14 +830,15 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid)
 		SATParameters::STHeartbeatResp stHeartbeatResp;
 		std::string url = Global::g_stSATConfig.szExecuteServer;
 		url.append("/ajaxInteractiveManage!executeHeartbeat.action");
-		
+
 		stHeartbeatReq.strUserName = that->m_stLoginReq.strUserName;
 		stHeartbeatReq.strRunnerMac = that->m_stLoginReq.strMAC;
 		stHeartbeatReq.devicelist.assign(that->m_vtDevice.begin(), that->m_vtDevice.end());
 		if ( Heartbeat(url, stHeartbeatReq, stHeartbeatResp) ) {
 #ifdef _DEBUG
-		OutputDebugString("心跳查询成功\n");
+			OutputDebugString("心跳查询成功\n");
 #endif
+			Global::WriteTextLog("心跳查询成功");
 			std::vector<SATParameters::STTask>::iterator it = stHeartbeatResp.vtTask.begin();
 			for ( ; it != stHeartbeatResp.vtTask.end(); it++ ) {
 				if (!that->IsTaskExist(*it)) {
@@ -866,12 +869,12 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid)
 					// 通知SAT服务器,脚本开始执行;
 					// 待开发:同时将任务存储到数据库中;
 					/*
-						db process
+					db process
 					*/
 				}
 			}
 		}
-		
+
 	} while ( WaitForSingleObject(that->m_hEventHearbeat, 5000) == WAIT_TIMEOUT );
 
 	return 0;

+ 8 - 3
SATService/SATService/SATService.cpp

@@ -41,7 +41,11 @@ void CALLBACK WorkStart()
 // 工作结束回调函数;
 void CALLBACK WorkEndof()
 {
+	Global::WriteTextLog("SATService goto end");
+	CSATTCPServer::GetInstance()->Stop();
+	CSATTCPServer::GetInstance()->UnloadSocketLib();
 	CMainProcess::GetInstance()->EndofWork();
+	Global::WriteTextLog("SATService work end!");
 }
 
 
@@ -66,6 +70,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		// TODO: 在此处为应用程序的行为编写代码。
 		Global::GetIniInfo();
 		Global::GetMacAddress();
+		Global::WriteTextLog("SATService goto start");
 #ifdef _DEBUG
 
 #if 0
@@ -100,9 +105,9 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		TCHAR szExeName[MAX_PATH] = {0};
 		TCHAR szDrive[_MAX_DRIVE] = { 0 };
 		TCHAR szDir[_MAX_DIR] = { 0 };
-		TCHAR szFna[_MAX_DIR] = { 0 };
-		TCHAR szExt[_MAX_DIR] = { 0 };
-		_tsplitpath_s(Global::g_szModuleFileName, szDrive, szDir, szFna, szExt);
+		TCHAR szFna[_MAX_FNAME] = { 0 };
+		TCHAR szExt[_MAX_EXT] = { 0 };
+		_tsplitpath_s(Global::g_szCurModuleFileName, szDrive, szDir, szFna, szExt);
 		_stprintf_s(szExeName, _T("%s%s"), szFna, szExt);
 		if ( Global::FindProcessCount(szExeName) > 1)
 		{// 进程计数大于1,退出;

+ 26 - 2
SATService/SATService/SATTCPServer.cpp

@@ -75,6 +75,7 @@ DWORD WINAPI CSATTCPServer::_WorkerThread(LPVOID lpParam)
 		// 如果收到的是退出标志,则直接退出
 		if ( EXIT_CODE==(DWORD)pSocketContext )
 		{
+			pIOCPModel->_ShowMessage(_T("收到的是退出标志,则直接退出,ID: %d."),nThreadNo);
 			break;
 		}
 
@@ -224,7 +225,7 @@ bool CSATTCPServer::Start(unsigned int port)
 //	开始发送系统退出消息,退出完成端口和线程资源
 void CSATTCPServer::Stop()
 {
-	if( m_pListenContext!=NULL && m_pListenContext->m_Socket!=INVALID_SOCKET )
+	if( m_pListenContext != NULL && m_pListenContext->m_Socket != INVALID_SOCKET )
 	{
 		// 激活关闭消息通知
 		SetEvent(m_hShutdownEvent);
@@ -430,6 +431,9 @@ void CSATTCPServer::_DeInitialize()
 	// 关闭IOCP句柄
 	RELEASE_HANDLE(m_hIOCompletionPort);
 
+	// 先关闭端口;
+	RELEASE_SOCKET( m_pListenContext->m_Socket );
+
 	// 关闭监听Socket
 	RELEASE(m_pListenContext);
 
@@ -708,12 +712,16 @@ void CSATTCPServer::_ShowMessage(const CString szFormat,...) const
 	strMessage.FormatV(szFormat,arglist);
 	va_end(arglist);
 
-//	Global::WriteTextLog(strMessage);
+	Global::WriteTextLog(strMessage);
 }
 
 #define PAK_LEN sizeof(SATProtocol::DataHeader)
 void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext)
 {
+#ifdef _DEBUG
+	OutputDebugString("有数据返回\n");
+#endif
+	Global::WriteTextLog("有数据返回");
 	// 小于包头;
 	SATProtocol::DataHeader* phead = NULL;
 	if (pSocketContext->lastData.size() == 0)
@@ -722,6 +730,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 		if (PAK_LEN > pIoContext->m_Overlapped.InternalHigh)
 		{
 			OutputDebugString("A:不足包头;\n");
+			Global::WriteTextLog("A:不足包头");
 			pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
 		}
 		else
@@ -731,6 +740,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			if ( !CheckDataHeader(phead) )
 			{
 				OutputDebugString("A:包头损坏;\n");
+				Global::WriteTextLog("A:包头损坏");
 				return;
 			}
 
@@ -738,18 +748,21 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			if (phead->len == pIoContext->m_Overlapped.InternalHigh)
 			{
 				OutputDebugString("A:完整的包;\n");
+				Global::WriteTextLog("A:完整的包");
 				_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
 			}
 			// 小包;
 			else if (phead->len > pIoContext->m_Overlapped.InternalHigh)
 			{
 				OutputDebugString("A:小包;\n");
+				Global::WriteTextLog("A:小包");
 				pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
 			}
 			// 超包;
 			else if (phead->len < pIoContext->m_Overlapped.InternalHigh)
 			{
 				OutputDebugString("A:超包;\n");
+				Global::WriteTextLog("A:超包");
 				pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + phead->len, pIoContext->m_Overlapped.InternalHigh - phead->len);
 				_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
 			}
@@ -764,6 +777,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			if ( !CheckDataHeader(phead) )
 			{
 				OutputDebugString("C:包头损坏;\n");
+				Global::WriteTextLog("C:包头损坏");
 				pSocketContext->lastData.clear();
 				return;
 			}
@@ -773,6 +787,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 				if ( phead->len <= pSocketContext->lastData.size() )
 				{
 					OutputDebugString("C:超包;\n");
+					Global::WriteTextLog("C:超包");
 					// 完整包;
 					_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.substr(0, phead->len).data());
 
@@ -782,6 +797,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 				else
 				{
 					OutputDebugString("D:超包;\n");
+					Global::WriteTextLog("D:超包");
 					lastlen = pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh - phead->len;
 					pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh - lastlen);
 					// 完整包;
@@ -795,6 +811,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			else
 			{
 				OutputDebugString("C:仍不足一个包;\n");
+				Global::WriteTextLog("C:仍不足一个包");
 				pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
 			}
 		}
@@ -806,6 +823,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 			if ( diflen > pIoContext->m_Overlapped.InternalHigh )
 			{
 				OutputDebugString("B:仍不足一个包头;\n");
+				Global::WriteTextLog("B:仍不足一个包头");
 				pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
 			}
 			else
@@ -816,6 +834,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 				if ( !CheckDataHeader(phead) )
 				{
 					OutputDebugString("B:包头损坏;\n");
+					Global::WriteTextLog("B:包头损坏");
 					pSocketContext->lastData.clear();
 					return;
 				}
@@ -824,6 +843,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 				if ( phead->len == PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen )
 				{
 					OutputDebugString("B:完整包;\n");
+					Global::WriteTextLog("B:完整包");
 					pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
 					_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
 					pSocketContext->lastData.clear();
@@ -832,12 +852,14 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 				else if ( phead->len > PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen)
 				{
 					OutputDebugString("B:小包;\n");
+					Global::WriteTextLog("B:小包");
 					pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
 				}
 				// 超包;
 				else if (phead->len < PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen)
 				{
 					OutputDebugString("B:超包;\n");
+					Global::WriteTextLog("B:超包");
 					// 组完成包;
 					pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, phead->len - PAK_LEN);
 					_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
@@ -858,6 +880,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATProtocol::Packag
 #ifdef _DEBUG
 	OutputDebugString("\n########成功获取数据########\n\n");
 #endif
+	Global::WriteTextLog("成功获取数据");
 
 	SATProtocol::DataHeader *pHeader = &pak->header;
 	if ( !pHeader ) 
@@ -871,6 +894,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATProtocol::Packag
 				{
 					// 登录;
 					SATProtocol::UserInfo *pLogin = (SATProtocol::UserInfo*)pak->buf;
+					Global::WriteTextLog(_T("User=%s, psw=%s"), pLogin->szUserName, pLogin->szPassword);
 					bool bRet = CSATExecutor::GetInstance()->Login(pLogin->szUserName, pLogin->szPassword, !pHeader->cmd);
 
 					// 计算数据包长度;

+ 2 - 0
SATService/tcp_client.py

@@ -163,6 +163,8 @@ class SATClient(object):
             self.connect()
             return False
 
+        # time.sleep(0.1)
+        # return False
         '''接收返回数据'''
         try:
             # 等待数据返回;(串口若请求失败,超时值应该设置在3秒以上)