svrgoodbyeevent.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program 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 3 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, see <http://www.gnu.org/licenses/>.
  17. */
  18. /***********************************************************************************************
  19. *** Confidential - Westwood Studios ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : Commando *
  23. * *
  24. * $Archive:: /Commando/Code/Commando/svrgoodbyeevent.cpp $*
  25. * *
  26. * $Author:: Tom_s $*
  27. * *
  28. * $Modtime:: 2/14/02 3:10p $*
  29. * *
  30. * $Revision:: 19 $*
  31. * *
  32. *---------------------------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #include "svrgoodbyeevent.h"
  36. #include <stdio.h>
  37. #include <stdlib.h>
  38. #include "networkobjectfactory.h"
  39. #include "gamemode.h"
  40. #include "cnetwork.h"
  41. #include "translatedb.h"
  42. #include "string_ids.h"
  43. #include "textdisplay.h"
  44. #include "wwaudio.h"
  45. #include "devoptions.h"
  46. //#include "helptext.h"
  47. #include "dlgmessagebox.h"
  48. #include "apppackettypes.h"
  49. #include "string_ids.h"
  50. #include "dlgcncwinscreen.h"
  51. #include "gamespyadmin.h"
  52. #include "dlgmpconnectionrefused.h"
  53. #include "specialbuilds.h"
  54. #include "gamespyadmin.h"
  55. //
  56. // TSS2001 Problem - we have lost the unreliable multiblast effect for this message
  57. //
  58. DECLARE_NETWORKOBJECT_FACTORY(cSvrGoodbyeEvent, NETCLASSID_SVRGOODBYEEVENT);
  59. //-----------------------------------------------------------------------------
  60. cSvrGoodbyeEvent::cSvrGoodbyeEvent(void)
  61. {
  62. IsQuickFullExitRequested = false;
  63. Set_App_Packet_Type(APPPACKETTYPE_SVRGOODBYEEVENT);
  64. }
  65. //-----------------------------------------------------------------------------
  66. void
  67. cSvrGoodbyeEvent::Init(bool flag)
  68. {
  69. WWASSERT(cNetwork::I_Am_Server());
  70. IsQuickFullExitRequested = flag;
  71. Set_Object_Dirty_Bit(BIT_CREATION, true);
  72. /*
  73. if (cNetwork::I_Am_Client())
  74. {
  75. Act();
  76. }
  77. */
  78. }
  79. //-----------------------------------------------------------------------------
  80. void
  81. cSvrGoodbyeEvent::Act(void)
  82. {
  83. if (cNetwork::I_Am_Only_Client()) {
  84. cNetwork::PClientConnection->Destroy_Connection(0); // destroy connection to server
  85. if (cGameSpyAdmin::Get_Is_Launched_From_Gamespy()) {
  86. DlgMPConnectionRefused::DoDialog(TRANSLATION(IDS_MP_SERVER_SHUT_DOWN), true);
  87. } else {
  88. DlgMsgBox::DoDialog(TRANSLATION(IDS_MENU_SERVER_MESSAGE_TITLE), TRANSLATION(IDS_MP_SERVER_SHUT_DOWN));
  89. }
  90. //
  91. // Close out the win screen dialog (if its up)
  92. //
  93. CNCWinScreenMenuClass::Close_Dialog ();
  94. WWAudioClass::Get_Instance()->Create_Instant_Sound("System_Message", Matrix3D(1));
  95. if (IsQuickFullExitRequested)
  96. {
  97. WWDEBUG_SAY(("Quick full exit instructed from server.\n"));
  98. cDevOptions::QuickFullExit.Set(true);
  99. }
  100. else
  101. {
  102. //TSS090401
  103. //
  104. // The client needs to quit back to the game list
  105. //
  106. if (!cGameSpyAdmin::Get_Is_Launched_From_Gamespy()) {
  107. extern bool g_client_quit;
  108. g_client_quit = true;
  109. }
  110. }
  111. }
  112. Set_Delete_Pending();
  113. }
  114. //-----------------------------------------------------------------------------
  115. void
  116. cSvrGoodbyeEvent::Export_Creation(BitStreamClass & packet)
  117. {
  118. WWASSERT(cNetwork::I_Am_Server());
  119. cNetEvent::Export_Creation(packet);
  120. packet.Add(IsQuickFullExitRequested);
  121. Set_Delete_Pending();
  122. }
  123. //-----------------------------------------------------------------------------
  124. void
  125. cSvrGoodbyeEvent::Import_Creation(BitStreamClass & packet)
  126. {
  127. cNetEvent::Import_Creation(packet);
  128. WWASSERT(cNetwork::I_Am_Only_Client());
  129. packet.Get(IsQuickFullExitRequested);
  130. Act();
  131. }
  132. /*
  133. else if (cGameSpyAdmin::Get_Is_Launched_From_Gamespy())
  134. {
  135. extern void Stop_Main_Loop (int);
  136. Stop_Main_Loop(EXIT_SUCCESS);
  137. }
  138. */