Loading src/gameinfoplus.h +9 −16 Original line number Diff line number Diff line Loading @@ -18,21 +18,14 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *******************************************************************************/ class Gameinfo { class GameInfoData{ public: ~Gameinfo(){}; virtual void refresh()=0; virtual const char *getGameName()=0; virtual const char *getServerName()=0; virtual const char *getMapName()=0; virtual const char *getModName()=0; virtual bool pwProtected()=0; virtual int getPlayers()=0; virtual int getMaxPlayers()=0; virtual int getBotsAmount()=0; std::string GameName; std::string ServerName; std::string MapName; std::string ModName; bool pwProtected; int Players; int BotsAmount; int MaxPlayers; }; src/hldsview.cpp +21 −61 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ HldsView::HldsView(const char *addr,int port){ }catch(netplus::NetException &exp){ throw exp.what(); } refresh(); } HldsView::~HldsView(){ Loading @@ -51,7 +50,7 @@ HldsView::~HldsView(){ delete serverSocket; } void HldsView::refresh(){ void HldsView::refresh(HldsData &info){ char buffer[1400]; int rcv=0; try{ Loading @@ -60,12 +59,12 @@ void HldsView::refresh(){ clientSocket->sendData(serverSocket,(void*)&payload,A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE); char recv[8]; char recv[9]; rcv=clientSocket->recvData(serverSocket,&recv,sizeof(recv)); uint8_t challange[4]={0}; if(recv[4] == 0x41){ memcpy(challange,recv+5,3); memcpy(challange,recv+5,4); } AGAIN: Loading @@ -88,71 +87,32 @@ void HldsView::refresh(){ throw exp.what(); } _parse(buffer,rcv); _parse(info,buffer,rcv); } void HldsView::_parse(HldsData &info,const char* data, size_t len){ const char * HldsView::getGameName(){ return _GameData.gamename.c_str(); } const char *HldsView::getServerName(){ return _GameData.name.c_str();; } const char *HldsView::getMapName(){ return _GameData.map.c_str();; } const char *HldsView::getModName(){ return _GameData.modname.c_str();; } bool HldsView::pwProtected(){ if(_GameData.visibility==1) return true; return false; } int HldsView::getPlayers(){ return (int)_GameData.players; } int HldsView::getMaxPlayers(){ return (int) _GameData.maxplayers; } int HldsView::getBotsAmount(){ return (int) _GameData.bots; } void HldsView::_parse(const char* data, size_t len){ _GameData.header=0x00; info.header=0x00; for(int i=0; i<len; ++i){ if(data[i]==0x49){ _GameData.header=0x49; info.header=0x49; data+=++i; len-=i; } } if(_GameData.header!=0x49){ if(info.header!=0x49){ throw "_parse: no hlds server!"; } _GameData.protocol=data[0]; info.protocol=data[0]; data=data+1; len-=1; for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.name.assign(data,data+i); info.ServerName.assign(data,data+i); data+=++i; len-=i; break; Loading @@ -161,7 +121,7 @@ void HldsView::_parse(const char* data, size_t len){ for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.map.assign(data,data+i); info.MapName.assign(data,data+i); data+=++i; len-=i; break; Loading @@ -170,7 +130,7 @@ void HldsView::_parse(const char* data, size_t len){ for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.modname.assign(data,data+i); info.ModName.assign(data,data+i); data+=++i; len-=i; break; Loading @@ -180,42 +140,42 @@ void HldsView::_parse(const char* data, size_t len){ for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.gamename.assign(data,data+i); info.GameName.assign(data,data+i); data+=++i; len-=i; break; } } memcpy(&_GameData.steamid,data,sizeof(short)); memcpy(&info.steamid,data,sizeof(short)); data=data+sizeof(short); len-=sizeof(short); _GameData.players=data[0]; info.Players=data[0]; data=data+1; len-=1; _GameData.maxplayers=data[0]; info.MaxPlayers=data[0]; data=data+1; len-=1; _GameData.bots=data[0]; info.BotsAmount=data[0]; data=data+1; len-=1; _GameData.servertype=data[0]; info.servertype=data[0]; data=data+1; len-=1; _GameData.env=data[0]; info.env=data[0]; data=data+1; len-=1; _GameData.visibility=data[0]; info.visibility=data[0]; data=data+1; len-=1; _GameData.vac=data[0]; info.vac=data[0]; data=data+1; len-=1; } src/hldsview.h +9 −24 Original line number Diff line number Diff line Loading @@ -24,42 +24,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #pragma once class HldsView : public Gameinfo { class HldsView { public: HldsView(const char *addr,int port); ~HldsView(); void refresh(); const char *getGameName(); const char *getServerName(); const char *getMapName(); const char *getModName(); bool pwProtected(); int getPlayers(); int getMaxPlayers(); int getBotsAmount(); private: struct { class HldsData : public GameInfoData{ public: uint8_t header; uint8_t protocol; std::string name; std::string map; std::string modname; std::string gamename; short steamid; uint8_t players; uint8_t maxplayers; uint8_t bots; uint8_t servertype; uint8_t env; uint8_t visibility; uint8_t vac; } _GameData; friend class HldsView; }; void _parse(const char *data,size_t len); void refresh(HldsData &info); private: void _parse(HldsData &info,const char *data,size_t len); netplus::udp *clientSocket; netplus::udp *serverSocket; Loading Loading
src/gameinfoplus.h +9 −16 Original line number Diff line number Diff line Loading @@ -18,21 +18,14 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *******************************************************************************/ class Gameinfo { class GameInfoData{ public: ~Gameinfo(){}; virtual void refresh()=0; virtual const char *getGameName()=0; virtual const char *getServerName()=0; virtual const char *getMapName()=0; virtual const char *getModName()=0; virtual bool pwProtected()=0; virtual int getPlayers()=0; virtual int getMaxPlayers()=0; virtual int getBotsAmount()=0; std::string GameName; std::string ServerName; std::string MapName; std::string ModName; bool pwProtected; int Players; int BotsAmount; int MaxPlayers; };
src/hldsview.cpp +21 −61 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ HldsView::HldsView(const char *addr,int port){ }catch(netplus::NetException &exp){ throw exp.what(); } refresh(); } HldsView::~HldsView(){ Loading @@ -51,7 +50,7 @@ HldsView::~HldsView(){ delete serverSocket; } void HldsView::refresh(){ void HldsView::refresh(HldsData &info){ char buffer[1400]; int rcv=0; try{ Loading @@ -60,12 +59,12 @@ void HldsView::refresh(){ clientSocket->sendData(serverSocket,(void*)&payload,A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE); char recv[8]; char recv[9]; rcv=clientSocket->recvData(serverSocket,&recv,sizeof(recv)); uint8_t challange[4]={0}; if(recv[4] == 0x41){ memcpy(challange,recv+5,3); memcpy(challange,recv+5,4); } AGAIN: Loading @@ -88,71 +87,32 @@ void HldsView::refresh(){ throw exp.what(); } _parse(buffer,rcv); _parse(info,buffer,rcv); } void HldsView::_parse(HldsData &info,const char* data, size_t len){ const char * HldsView::getGameName(){ return _GameData.gamename.c_str(); } const char *HldsView::getServerName(){ return _GameData.name.c_str();; } const char *HldsView::getMapName(){ return _GameData.map.c_str();; } const char *HldsView::getModName(){ return _GameData.modname.c_str();; } bool HldsView::pwProtected(){ if(_GameData.visibility==1) return true; return false; } int HldsView::getPlayers(){ return (int)_GameData.players; } int HldsView::getMaxPlayers(){ return (int) _GameData.maxplayers; } int HldsView::getBotsAmount(){ return (int) _GameData.bots; } void HldsView::_parse(const char* data, size_t len){ _GameData.header=0x00; info.header=0x00; for(int i=0; i<len; ++i){ if(data[i]==0x49){ _GameData.header=0x49; info.header=0x49; data+=++i; len-=i; } } if(_GameData.header!=0x49){ if(info.header!=0x49){ throw "_parse: no hlds server!"; } _GameData.protocol=data[0]; info.protocol=data[0]; data=data+1; len-=1; for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.name.assign(data,data+i); info.ServerName.assign(data,data+i); data+=++i; len-=i; break; Loading @@ -161,7 +121,7 @@ void HldsView::_parse(const char* data, size_t len){ for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.map.assign(data,data+i); info.MapName.assign(data,data+i); data+=++i; len-=i; break; Loading @@ -170,7 +130,7 @@ void HldsView::_parse(const char* data, size_t len){ for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.modname.assign(data,data+i); info.ModName.assign(data,data+i); data+=++i; len-=i; break; Loading @@ -180,42 +140,42 @@ void HldsView::_parse(const char* data, size_t len){ for(int i=0; i<len; ++i){ if(data[i]=='\0'){ _GameData.gamename.assign(data,data+i); info.GameName.assign(data,data+i); data+=++i; len-=i; break; } } memcpy(&_GameData.steamid,data,sizeof(short)); memcpy(&info.steamid,data,sizeof(short)); data=data+sizeof(short); len-=sizeof(short); _GameData.players=data[0]; info.Players=data[0]; data=data+1; len-=1; _GameData.maxplayers=data[0]; info.MaxPlayers=data[0]; data=data+1; len-=1; _GameData.bots=data[0]; info.BotsAmount=data[0]; data=data+1; len-=1; _GameData.servertype=data[0]; info.servertype=data[0]; data=data+1; len-=1; _GameData.env=data[0]; info.env=data[0]; data=data+1; len-=1; _GameData.visibility=data[0]; info.visibility=data[0]; data=data+1; len-=1; _GameData.vac=data[0]; info.vac=data[0]; data=data+1; len-=1; }
src/hldsview.h +9 −24 Original line number Diff line number Diff line Loading @@ -24,42 +24,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #pragma once class HldsView : public Gameinfo { class HldsView { public: HldsView(const char *addr,int port); ~HldsView(); void refresh(); const char *getGameName(); const char *getServerName(); const char *getMapName(); const char *getModName(); bool pwProtected(); int getPlayers(); int getMaxPlayers(); int getBotsAmount(); private: struct { class HldsData : public GameInfoData{ public: uint8_t header; uint8_t protocol; std::string name; std::string map; std::string modname; std::string gamename; short steamid; uint8_t players; uint8_t maxplayers; uint8_t bots; uint8_t servertype; uint8_t env; uint8_t visibility; uint8_t vac; } _GameData; friend class HldsView; }; void _parse(const char *data,size_t len); void refresh(HldsData &info); private: void _parse(HldsData &info,const char *data,size_t len); netplus::udp *clientSocket; netplus::udp *serverSocket; Loading