ConnectSocket5.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. //在ConnectSocket.cpp文件中实现连接套接字的创建,该类是CConnectThread类的
  2. //一部分,收到数据由函数OnReceive()完成处理。 movenext 4096
  3. #include "stdafx.h"
  4. #include "DBServer.h"
  5. #include "theDBServer.h"
  6. #include "ConnectSocket.h"
  7. #include "ConnectThread.h"
  8. #include "DBServerDlg.h"
  9. #include "DataSocket.h"
  10. #include "mysqldata.h"
  11. #include "./include/netMain.h"
  12. #include "./include/protocolhdr.h"
  13. #include "./include/struct_def.h"
  14. #include "Lzari.h"
  15. #include "MyLock.h"
  16. #include "Shlwapi.h"
  17. #include "CalendarConvert.h"
  18. #include "AddUserDlg.h"
  19. #include "NetShareInfo.h"
  20. #include "AdoImplSvr.h"
  21. #include "DataDef.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27. extern void CovertDate(CString &date, CString &date2);
  28. extern void ConvertToPrice(CString &str);
  29. extern CDBServerDlg* g_pMainWnd;
  30. extern CtheDBServer theServer;
  31. extern CtheDBServer* g_pWndServer;
  32. void CConnectSocket::GetDataFromCode5(BYTE &code, BYTE **szDataBuf, DWORD &nDataLen, DWORD &arraysize, CString filter)
  33. {//m_List1array
  34. int nStep = 0;
  35. try
  36. {
  37. if (g_ListData[code])
  38. delete[](g_ListData[code]);
  39. g_ListData[code] = NULL;
  40. nStep = 1;
  41. DWORD ii = 0;
  42. CArray<CStringArray, CStringArray> listArray;
  43. try
  44. {
  45. switch (code)
  46. {
  47. case 1: //执行sql语句
  48. {
  49. if(m_pAdoImpl == NULL)
  50. return;
  51. if(filter == _T(""))
  52. return;
  53. TCHAR tszSql[4096] = {0};
  54. wsprintf(tszSql, _T("%s"), filter);
  55. m_pAdoImpl->Execute(tszSql);
  56. }
  57. break;
  58. case 2: //log
  59. {
  60. int nFieldCount = 0;
  61. CDataBase* p = new Tbl2015;
  62. CTime tm = CTime::GetCurrentTime();
  63. CString strTableName = _T("");
  64. strTableName.Format(_T("[%s]"), tm.Format(_T("%Y")));
  65. CString strSQL = _T("");
  66. if(filter == _T(""))
  67. strSQL = _T("select * from ") + strTableName;
  68. else
  69. strSQL = _T("select * from ") + strTableName + _T(" where ") + filter;
  70. p->GetRecordSet(m_pAdoImpl, strTableName, filter.GetString(), strSQL, nFieldCount, listArray);
  71. delete p;
  72. }
  73. break;
  74. }
  75. }
  76. #if JEFF_TEST_ON
  77. catch (CException* e)
  78. {
  79. TCHAR szError[1024] = { 0 };
  80. e->GetErrorMessage(szError, 1024);
  81. WriteLogin(CString(szError));
  82. e->Delete();
  83. CString ss;
  84. ss.Format("#出错在函数getdata中-code:%d/%d ip:%s", code, nStep, ((CConnectThread *)AfxGetThread())->m_strRemoteHost);
  85. WriteLogin(ss);
  86. return;
  87. }
  88. #else
  89. catch(CDBException * e)
  90. {
  91. WriteLogin(e->m_strError);
  92. CString ss;
  93. ss.Format ("#出错在函数getdata中-code:%d/%d ip:%s", code, nStep, ((CConnectThread *)AfxGetThread())->m_strRemoteHost);
  94. WriteLogin(ss);
  95. e->Delete();
  96. return;
  97. }
  98. #endif
  99. nStep = 2;
  100. CMemFile memfile;
  101. CArchive ar(&memfile, CArchive::store);
  102. for (ii = 0; ii < listArray.GetSize(); ii++)
  103. {
  104. listArray.ElementAt(ii).Serialize(ar);
  105. }
  106. ar.Close();
  107. nStep = 3;
  108. if (g_ListData[code])delete[](g_ListData[code]); g_ListData[code] = NULL;
  109. nStep = 4;
  110. int leng = memfile.GetLength();
  111. BOOL bZip = 0;
  112. BOOL bOK = 0;
  113. int lengtemp = leng;
  114. while (lengtemp)
  115. {
  116. if (lengtemp % 2 == 0)
  117. {
  118. lengtemp /= 2;
  119. if (lengtemp == 1)
  120. {
  121. bOK = 1;
  122. break;
  123. }
  124. }
  125. else
  126. break;
  127. }
  128. nStep = 5;
  129. if (leng < 10240 || bOK)
  130. {
  131. g_ListData[code] = memfile.Detach();
  132. nDataLen = g_ListLeng[code] = leng;
  133. *szDataBuf = g_ListData[code];
  134. arraysize = g_ListSize[code] = listArray.GetSize();
  135. }
  136. else
  137. {
  138. bZip = 1;
  139. BYTE *pData = memfile.Detach();
  140. const BYTE *lpszOut = NULL;
  141. int nOutSize = 0;
  142. LZARI Lzari;
  143. Lzari.Compress(pData, leng, lpszOut, nOutSize);
  144. delete[]pData;
  145. g_ListData[code] = new BYTE[nOutSize];
  146. memcpy(g_ListData[code], lpszOut, nOutSize); Lzari.Release();
  147. nDataLen = g_ListLeng[code] = nOutSize;
  148. *szDataBuf = g_ListData[code];
  149. arraysize = g_ListSize[code] = listArray.GetSize();
  150. }
  151. code = bZip;
  152. nStep = 6;
  153. }
  154. #if JEFF_TEST_ON
  155. catch (CException* e)
  156. {
  157. CString ss;
  158. ss.Format("出错在函数getdata中-code:%d/%d ip:%s", code, nStep, ((CConnectThread *)AfxGetThread())->m_strRemoteHost);
  159. WriteLogin(ss);
  160. TCHAR szError[1024] = { 0 };
  161. e->GetErrorMessage(szError, 1024);
  162. WriteLogin(CString(szError));
  163. e->Delete();
  164. }
  165. #else
  166. catch(...)
  167. {
  168. CString ss;
  169. ss.Format ("出错在函数getdata中-code:%d/%d ip:%s", code, nStep, ((CConnectThread *)AfxGetThread())->m_strRemoteHost);
  170. WriteLogin(ss);
  171. }
  172. #endif
  173. }