Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
3.0 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================
  7. #include "DialogAddServer.h"
  8. #include "INetAPI.h"
  9. #include "IGameList.h"
  10. #include "Server.h"
  11. #include <VGUI_MessageBox.h>
  12. #include <VGUI_KeyValues.h>
  13. using namespace vgui;
  14. //-----------------------------------------------------------------------------
  15. // Purpose: Constructor
  16. // Input : *gameList - game list to add specified server to
  17. //-----------------------------------------------------------------------------
  18. CDialogAddServer::CDialogAddServer(IGameList *gameList) : Frame(NULL, "DialogAddServer")
  19. {
  20. MakePopup();
  21. m_pGameList = gameList;
  22. SetTitle("Add Server - Servers", true);
  23. LoadControlSettings("Admin\\DialogAddServer.res");
  24. }
  25. //-----------------------------------------------------------------------------
  26. // Purpose: Destructor
  27. //-----------------------------------------------------------------------------
  28. CDialogAddServer::~CDialogAddServer()
  29. {
  30. }
  31. //-----------------------------------------------------------------------------
  32. // Purpose: Activates this dialog
  33. //-----------------------------------------------------------------------------
  34. void CDialogAddServer::Open()
  35. {
  36. MoveToFront();
  37. RequestFocus();
  38. }
  39. //-----------------------------------------------------------------------------
  40. // Purpose:
  41. // Input : *command -
  42. //-----------------------------------------------------------------------------
  43. void CDialogAddServer::OnCommand(const char *command)
  44. {
  45. if (!stricmp(command, "OK"))
  46. {
  47. OnOK();
  48. }
  49. else
  50. {
  51. BaseClass::OnCommand(command);
  52. }
  53. }
  54. //-----------------------------------------------------------------------------
  55. // Purpose: Handles the OK button being pressed; adds the server to the game list
  56. //-----------------------------------------------------------------------------
  57. void CDialogAddServer::OnOK()
  58. {
  59. // try and parse out IP address
  60. const char *address = GetControlString("ServerNameText", "");
  61. netadr_t netaddr;
  62. if (net->StringToAdr(address, &netaddr))
  63. {
  64. // net address successfully parsed, add the server to the game list
  65. serveritem_t server;
  66. memset(&server, 0, sizeof(server));
  67. for (int i = 0; i < 4; i++)
  68. {
  69. server.ip[i] = netaddr.ip[i];
  70. }
  71. server.port = (netaddr.port & 0xff) << 8 | (netaddr.port & 0xff00) >> 8;;
  72. if (!server.port)
  73. {
  74. // use the default port since it was not entered
  75. server.port = 27015;
  76. }
  77. m_pGameList->AddNewServer(server);
  78. m_pGameList->StartRefresh();
  79. }
  80. else
  81. {
  82. // could not parse the ip address, popup an error
  83. MessageBox *dlg = new MessageBox("Add Server - Error", "The server IP address you entered is invalid.");
  84. dlg->DoModal();
  85. }
  86. // mark ourselves to be closed
  87. PostMessage(this, new KeyValues("Close"));
  88. }
  89. //-----------------------------------------------------------------------------
  90. // Purpose: Deletes dialog on close
  91. //-----------------------------------------------------------------------------
  92. void CDialogAddServer::OnClose()
  93. {
  94. BaseClass::OnClose();
  95. MarkForDeletion();
  96. }