Server.cpp
上传用户:maryhy001
上传日期:2007-05-02
资源大小:2317k
文件大小:6k
源码类别:

网格计算

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "Server.h"
  3. #include "ServerDlg.h"
  4. #include "adodataset.h"
  5. #include "netaddress.h"
  6. BEGIN_MESSAGE_MAP(CServerApp, CWinApp)
  7. //{{AFX_MSG_MAP(CServerApp)
  8. //}}AFX_MSG
  9. ON_COMMAND(ID_HELP, CWinApp::OnHelp)
  10. END_MESSAGE_MAP()
  11. CServerApp::CServerApp()
  12. {
  13. m_serverid = 1;
  14. }
  15. CServerApp theApp;
  16. BOOL CServerApp::InitInstance()
  17. {
  18. _unindex = 0;
  19. //////////////////////////////////////////////////////////////////////////
  20. if(this->m_oappinst.Exists())
  21. {
  22. m_serverid = -1;
  23. ::MessageBox(NULL, "系统中已经有一个trfServer实例在运行...", "trfServer v1.0", MB_OK | MB_ICONINFORMATION);
  24. return FALSE;
  25. }
  26. //////////////////////////////////////////////////////////////////////////
  27. //open the log file in current module file path
  28. char szfile[_MAX_PATH], szpath[_MAX_PATH];
  29. memset(szfile, 0x0, sizeof(szfile));
  30. GetModuleFileName(GetModuleHandle(NULL), szfile, _MAX_PATH-1);
  31. ExtractFilePath(szfile, szpath, _MAX_PATH);
  32. _snprintf(szfile, _MAX_PATH-1, "%s\%s", szpath, "trfServer.log");
  33. ::DeleteFile(szfile);
  34. m_syslog.SetFile(szfile, false);
  35. m_syslog.SetMode(VNCLog::ToFile);
  36. m_syslog.SetLevel((int)LL_ERROR);
  37. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : 开始初始化trfServer系统...n");
  38. //////////////////////////////////////////////////////////////////////////
  39. //Initialize the socket library.
  40. if(!Initialize())
  41. {
  42. m_syslog.Print(LL_ERROR, "CServerApp::InitInstance : 初始化Win32 Socket库失败...n");
  43. return FALSE;
  44. }
  45. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : 初始化Win32 Socket库成功.n");
  46. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : 初始化trfServer数据库连接...n");
  47. //create the db connection.
  48. const char szConnEnv[] = "Provider=MSDASQL.1;Persist Security Info=True;User ID=eftp;Password=888888;Data Source=eFtp";
  49. try
  50. {
  51. if(!this->m_dbcont.Create(szConnEnv))
  52. {
  53. m_syslog.Print(LL_ERROR, "CServerApp::InitInstance : 建立trfServer数据库连接失败...n");
  54. return FALSE;
  55. }
  56. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : 建立trfServer数据库连接成功.n");
  57. }
  58. catch (...)
  59. {
  60. m_syslog.Print(LL_ERROR, "CServerApp::InitInstance : 建立trfServer数据库连接失败...n");
  61. return FALSE;
  62. }
  63. //////////////////////////////////////////////////////////////////////////
  64. try
  65. {
  66. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : 正在注册trfServer服务...n");
  67. //register the server information.
  68. char szsqltext[MAX_SQL_SIZE];
  69. CADODataSet rs;
  70. rs.SetConnection(this->m_dbcont);
  71. string localip = CXNetAddress::GetLocalHostIp();
  72. _snprintf(szsqltext, MAX_SQL_SIZE-1, SQL::SERVER_REG_EXISTS, localip.data());
  73. if(!rs.Open(szsqltext))
  74. {
  75. m_syslog.Print(LL_WARNING, "CServerApp::InitInstance : 本机已有一个trfServer服务被注册过.n");
  76. return FALSE;
  77. }
  78. //if the server isn't registered in the db server yet then register it.
  79. if(rs.Fields().FieldByName("SVRCOUNT").getValue().AsInteger() == 0)
  80. {
  81. rs.Close();
  82. if(!rs.Open(SQL::SERVER_REG_GETSVRCNT))
  83. {
  84. return FALSE;
  85. }
  86. if(rs.Fields().FieldByName("SVRCOUNT").getValue().AsInteger() > 0)
  87. {
  88. rs.Close();
  89. if(!rs.Open(SQL::SERVER_REG_GETMAXID))
  90. {
  91. return FALSE;
  92. }
  93. m_serverid = rs.Fields().FieldByName("MAXSVRID").getValue().AsInteger()+1;
  94. rs.Close();
  95. }
  96. else rs.Close();
  97. sprintf(szsqltext, SQL::SERVER_REG_REGISTER, m_serverid, localip.c_str(), 0);
  98. if(!rs.Open(szsqltext))
  99. {
  100. return FALSE;
  101. }
  102. rs.Close();
  103. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : 本机服务注册成功,服务ID号=%dn", this->m_serverid);
  104. }
  105. }
  106. catch (_com_error e) {
  107. m_syslog.Print(LL_ERROR, "CServerApp::InitInstance : %sn", e.ErrorMessage());
  108. return FALSE;
  109. }
  110. m_syslog.Print(LL_INFO, "CServerApp::InitInstance : trfServer服务启动成功!!!n");
  111. //////////////////////////////////////////////////////////////////////////
  112. AfxEnableControlContainer();
  113. #ifdef _AFXDLL
  114. Enable3dControls(); // Call this when using MFC in a shared DLL
  115. #else
  116. Enable3dControlsStatic(); // Call this when linking to MFC statically
  117. #endif
  118. CServerDlg dlg;
  119. m_pMainWnd = &dlg;
  120. dlg.DoModal();
  121. return FALSE;
  122. }
  123. int CServerApp::ExitInstance()
  124. {
  125. if(-1 != m_serverid && this->m_dbcont.IsActived())
  126. {
  127. m_syslog.Print(LL_INFO, "CServerApp::ExitInstance: 准备结束服务...n");
  128. //////////////////////////////////////////////////////////////////////////
  129. //unregister current server information.
  130. char szsqltext[MAX_SQL_SIZE];
  131. CADODataSet rs;
  132. rs.SetConnection(this->m_dbcont);
  133. try
  134. {
  135. sprintf(szsqltext, SQL::SERVER_REG_UNREGISTER, this->m_serverid);
  136. if(!rs.Open(szsqltext))
  137. {
  138. m_syslog.Print(LL_ERROR, "CServerApp::ExitInstance: 反注销服务失败,原因是数据库访问失败...n");
  139. return 1;
  140. }
  141. rs.Close();
  142. }
  143. catch (_com_error e) 
  144. {
  145. m_syslog.Print(LL_ERROR, "CServerApp::ExitInstance: %sn", e.ErrorMessage());
  146. return 1;
  147. }
  148. //////////////////////////////////////////////////////////////////////////
  149. //uninitialize the socket library.
  150. UnInitialize();
  151. //destroy the db connection.
  152. this->m_dbcont.Destroy();
  153. m_syslog.Print(LL_INFO, "CServerApp::ExitInstance: trfServer服务退出!!!n");
  154. }
  155. return CWinApp::ExitInstance();
  156. }
  157. void CServerApp::_GetTempFileName(LPCSTR lpcsPostfix, LPSTR lpsTempFile)
  158. {
  159. assert(NULL != lpcsPostfix && lpsTempFile != NULL);
  160. char lpcurdir[MAX_PATH];
  161. memset(lpcurdir, 0x0, sizeof(lpcurdir));
  162. GetCurrentDirectory(sizeof(lpcurdir), lpcurdir);
  163. do 
  164. {
  165. InterlockedIncrement(&_unindex);
  166. sprintf(lpsTempFile, "%s\tmp%x.%s", lpcurdir, _unindex, lpcsPostfix);
  167. }
  168. while(FileExists(lpsTempFile));
  169. }