VNCviewerApp.cpp
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:4k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. //  Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
  2. //
  3. //  This file is part of the VNC system.
  4. //
  5. //  The VNC system is free software; you can redistribute it and/or modify
  6. //  it under the terms of the GNU General Public License as published by
  7. //  the Free Software Foundation; either version 2 of the License, or
  8. //  (at your option) any later version.
  9. //
  10. //  This program is distributed in the hope that it will be useful,
  11. //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. //  GNU General Public License for more details.
  14. //
  15. //  You should have received a copy of the GNU General Public License
  16. //  along with this program; if not, write to the Free Software
  17. //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  18. //  USA.
  19. //
  20. // If the source code for the VNC system is not available from the place 
  21. // whence you received this file, check http://www.orl.co.uk/vnc or contact
  22. // the authors on vnc@orl.co.uk for information on obtaining it.
  23. #include "stdhdrs.h"
  24. #include "vncviewer.h"
  25. #include "VNCviewerApp.h"
  26. #include "Exception.h"
  27. VNCviewerApp *pApp;
  28. VNCviewerApp::VNCviewerApp(HINSTANCE hInstance, LPTSTR szCmdLine) {
  29. pApp = this;
  30. m_instance = hInstance;
  31. // Read the command line
  32. m_options.SetFromCommandLine(szCmdLine);
  33. // Logging info
  34. log.SetLevel(m_options.m_logLevel);
  35. if (m_options.m_logToConsole) {
  36. log.SetMode(Log::ToConsole | Log::ToDebug);
  37. }
  38. if (m_options.m_logToFile) {
  39. log.SetFile(m_options.m_logFilename);
  40. }
  41. // Clear connection list
  42. for (int i = 0; i < MAX_CONNECTIONS; i++)
  43. m_clilist[i] = NULL;
  44. // Initialise winsock
  45. WORD wVersionRequested = MAKEWORD(2, 0);
  46. WSADATA wsaData;
  47. if (WSAStartup(wVersionRequested, &wsaData) != 0) {
  48. MessageBox(NULL, _T("Error initialising sockets library"), _T("VNC info"), MB_OK | MB_ICONSTOP);
  49. PostQuitMessage(1);
  50. }
  51. log.Print(3, _T("Started and Winsock (v %d) initialisedn"), wsaData.wVersion);
  52. }
  53. // The list of clients should fill up from the start and have NULLs
  54. // afterwards.  If the first entry is a NULL, the list is empty.
  55. void VNCviewerApp::RegisterConnection(ClientConnection *pConn) {
  56. omni_mutex_lock l(m_clilistMutex);
  57. int i;
  58. for (i = 0; i < MAX_CONNECTIONS; i++) {
  59. if (m_clilist[i] == NULL) {
  60. m_clilist[i] = pConn;
  61. log.Print(4,_T("Registered connection with appn"));
  62. return;
  63. }
  64. }
  65. // If we've got here, something is wrong.
  66. log.Print(-1, _T("Client list overflow!n"));
  67. MessageBox(NULL, _T("Client list overflow!"), _T("VNC error"),
  68. MB_OK | MB_ICONSTOP);
  69. PostQuitMessage(1);
  70. }
  71. void VNCviewerApp::DeregisterConnection(ClientConnection *pConn) {
  72. omni_mutex_lock l(m_clilistMutex);
  73. int i;
  74. for (i = 0; i < MAX_CONNECTIONS; i++) {
  75. if (m_clilist[i] == pConn) {
  76. // shuffle everything above downwards
  77. for (int j = i; m_clilist[j] && j < MAX_CONNECTIONS-1 ; j++)
  78. m_clilist[j] = m_clilist[j+1];
  79. m_clilist[MAX_CONNECTIONS-1] = NULL;
  80. log.Print(4,_T("Deregistered connection from appn"));
  81. // No clients left? then we should finish, unless we're in
  82. // listening mode.
  83. if ((m_clilist[0] == NULL) && (!pApp->m_options.m_listening))
  84. PostQuitMessage(0);
  85. return;
  86. }
  87. }
  88. // If we've got here, something is wrong.
  89. log.Print(-1, _T("Client not found for deregistering!n"));
  90. PostQuitMessage(1);
  91. }
  92. // ----------------------------------------------
  93. VNCviewerApp::~VNCviewerApp() {
  94. // Clean up winsock
  95. WSACleanup();
  96. log.Print(2, _T("VNC viewer closing downn"));
  97. }