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.

131 lines
2.5 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose: defines a RCon class used to send rcon commands to remote servers
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================
  7. #include "rulesinfo.h"
  8. #include "Iresponse.h"
  9. #include "RulesInfoMsgHandler.h"
  10. #include "Socket.h"
  11. #include "proto_oob.h"
  12. #include "DialogGameInfo.h"
  13. extern void v_strncpy(char *dest, const char *src, int bufsize);
  14. CRulesInfo::CRulesInfo(IResponse *target,serveritem_t &server) {
  15. memcpy(&m_Server, &server,sizeof(serveritem_t));
  16. m_pResponseTarget=target;
  17. m_bIsRefreshing=false;
  18. m_vRules=NULL;
  19. int bytecode = S2A_RULES;
  20. m_pQuery = new CSocket("internet rules query", -1);
  21. m_pQuery->AddMessageHandler(new CRulesInfoMsgHandlerDetails(this, CMsgHandler::MSGHANDLER_ALL, &bytecode));
  22. }
  23. CRulesInfo::~CRulesInfo() {
  24. delete m_pQuery;
  25. }
  26. //-----------------------------------------------------------------------------
  27. // Purpose: sends a status query packet to a single server
  28. //-----------------------------------------------------------------------------
  29. void CRulesInfo::Query()
  30. {
  31. CMsgBuffer *buffer = m_pQuery->GetSendBuffer();
  32. assert( buffer );
  33. if ( !buffer )
  34. {
  35. return;
  36. }
  37. m_bIsRefreshing=true;
  38. m_bRefreshed=false;
  39. netadr_t adr;
  40. adr.ip[0] = m_Server.ip[0];
  41. adr.ip[1] = m_Server.ip[1];
  42. adr.ip[2] = m_Server.ip[2];
  43. adr.ip[3] = m_Server.ip[3];
  44. adr.port = (m_Server.port & 0xff) << 8 | (m_Server.port & 0xff00) >> 8;
  45. adr.type = NA_IP;
  46. // Create query message
  47. buffer->Clear();
  48. // Write control sequence
  49. buffer->WriteLong(0xffffffff);
  50. // Write query string
  51. buffer->WriteString("rules");
  52. // Sendmessage
  53. m_pQuery->SendMessage( &adr, buffer );
  54. }
  55. //-----------------------------------------------------------------------------
  56. // Purpose:
  57. //-----------------------------------------------------------------------------
  58. void CRulesInfo::RunFrame()
  59. {
  60. if (m_pQuery)
  61. {
  62. m_pQuery->Frame();
  63. }
  64. }
  65. void CRulesInfo::UpdateServer(netadr_t *adr, CUtlVector<vgui::KeyValues *> *Rules)
  66. {
  67. m_Server.hadSuccessfulResponse = true;
  68. m_vRules=Rules;
  69. m_bIsRefreshing=false;
  70. m_bRefreshed=true;
  71. // notify the UI of the new server info
  72. m_pResponseTarget->ServerResponded();
  73. }
  74. void CRulesInfo::Refresh()
  75. {
  76. Query();
  77. }
  78. bool CRulesInfo::IsRefreshing()
  79. {
  80. return m_bIsRefreshing;
  81. }
  82. serveritem_t &CRulesInfo::GetServer()
  83. {
  84. return m_Server;
  85. }
  86. bool CRulesInfo::Refreshed()
  87. {
  88. bool val = m_bRefreshed;
  89. m_bRefreshed=false;
  90. return val;
  91. }
  92. CUtlVector<vgui::KeyValues *> *CRulesInfo::Rules()
  93. {
  94. return m_vRules;
  95. }