BVB Source Codes

CRYENGINE Show GameQueryListener.h Source code

Return Download CRYENGINE: download GameQueryListener.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description:  This listener looks for running servers in the LAN and
  8.    is keeping a list of all available servers.
  9.    There is a callback to get this list (ordered by ping) as well as to connect to one ...
  10.    -------------------------------------------------------------------------
  11.    History:
  12.    - 19/06/2006   : Implemented by Jan M眉ller
  13. *************************************************************************/
  14.  
  15. #ifndef __GAMEQUERYLISTENER_H__
  16. #define __GAMEQUERYLISTENER_H__
  17.  
  18. #pragma once
  19.  
  20. class CGameQueryListener : public IGameQueryListener
  21. {
  22.  
  23.         struct SGameServer
  24.         {
  25.                 string     m_target;
  26.                 string     m_description;
  27.                 string     m_data;
  28.                 uint32     m_ping;
  29.                 CTimeValue m_lastTime;
  30.  
  31.                 SGameServer(const char* target, const char* description, const char* data, const uint32 ping) :
  32.                         m_target(target), m_description(description), m_data(data), m_ping(ping)
  33.                 {
  34.                         m_lastTime = gEnv->pTimer->GetFrameStartTime();
  35.                 }
  36.  
  37.                 ~SGameServer()
  38.                 {
  39.  
  40.                 }
  41.  
  42.                 bool Compare(SGameServer& server)
  43.                 {
  44.                         if (server.m_target.compare(m_target) == 0 && server.m_description.compare(m_data) == 0)
  45.                                 return true;
  46.                         return false;
  47.                 }
  48.  
  49.                 bool operator<(const SGameServer& server) const
  50.                 {
  51.                         if (m_ping < server.m_ping)
  52.                                 return true;
  53.                         return false;
  54.                 }
  55.  
  56.                 void Inc(SGameServer& server)
  57.                 {
  58.                         if (m_data.compare(server.m_data) != 0)
  59.                                 m_data = server.m_data;
  60.                         IncPing(server.m_ping);
  61.                         m_lastTime = gEnv->pTimer->GetFrameStartTime();
  62.                 }
  63.  
  64.                 void IncPing(const uint32 ping)
  65.                 {
  66.                         if (m_ping)
  67.                                 m_ping = (3 * m_ping + ping) / int(4);
  68.                         else
  69.                                 m_ping = ping;
  70.                 }
  71.  
  72.                 string GetServerGameVersion()
  73.                 {
  74.                         string retVal("version not found in data");
  75.                         size_t pos1, pos2;
  76.                         pos1 = m_data.find(string("version"));    //this code will be broken if game info changes
  77.                         pos2 = m_data.find(string("maxPlayers"));
  78.                         if (pos1 != string::npos && pos2 != string::npos)
  79.                         {
  80.                                 pos1 += 9;
  81.                                 retVal = m_data.substr(pos1, pos2 - pos1 - 2);
  82.                         }
  83.                         return retVal;
  84.                 }
  85.         };
  86.  
  87. public:
  88.         CGameQueryListener();
  89.         ~CGameQueryListener();
  90.  
  91.         // IGameQueryListener
  92.         virtual void        AddServer(const char* description, const char* target, const char* additionalText, uint32 ping);
  93.         virtual void        RemoveServer(string address);
  94.         virtual void        AddPong(string address, uint32 ping);
  95.         virtual void        GetCurrentServers(char*** pastrServers, int& o_amount);
  96.         virtual void        GetServer(int number, char** server, char** data, int& ping);
  97.         virtual const char* GetServerData(const char* server, int& o_ping);
  98.         virtual void        Update();
  99.         virtual void        OnReceiveGameState(const char* fromAddress, XmlNodeRef xmlData);
  100.         virtual void        Release();
  101.         virtual void        RefreshPings();
  102.         virtual void        ConnectToServer(const char* server);
  103.         virtual void        GetValuesFromData(char* strData, SServerData* pServerData);
  104.         // ~IGameQueryListener
  105.  
  106.         void GetMemoryStatistics(ICrySizer* s);
  107.  
  108.         void SetNetListener(INetQueryListener* pListener);
  109.         void Complete();
  110.  
  111. private:
  112.  
  113.         SGameServer* FindServer(const char* target);
  114.  
  115.         //throw out old servers
  116.         void CleanUpServers();
  117.  
  118.         INetQueryListener* m_pNetListener;
  119.  
  120.         //a vector of servers currently running (from NetQueryListener)
  121.         std::vector<SGameServer> m_servers;
  122.         char*                    m_astrServers[120];
  123.         int                      m_iServers;
  124. };
  125.  
  126. #endif
  127.  
downloadGameQueryListener.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top