support for creating server list message
This commit is contained in:
parent
53e8cabdbe
commit
c4a578c85a
4 changed files with 86 additions and 18 deletions
|
@ -189,6 +189,18 @@ CONNECTION LESS MESSAGES
|
||||||
is permanent online.
|
is permanent online.
|
||||||
|
|
||||||
|
|
||||||
|
- PROTMESSID_CLM_SERVER_LIST: Server list message
|
||||||
|
|
||||||
|
for each registered server append following data:
|
||||||
|
|
||||||
|
+--------------------+--------------+--------------------------------+
|
||||||
|
| 4 bytes IP address | 2 bytes port | PROTMESSID_CLM_REGISTER_SERVER |
|
||||||
|
+--------------------+--------------+--------------------------------+
|
||||||
|
|
||||||
|
- "PROTMESSID_CLM_REGISTER_SERVER" means that exactly the same message body
|
||||||
|
of the PROTMESSID_CLM_REGISTER_SERVER message is used
|
||||||
|
|
||||||
|
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
@ -544,7 +556,7 @@ bool CProtocol::ParseConnectionLessMessage ( const CVector<uint8_t>& vecbyData,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTMESSID_CLM_SERVER_LIST:
|
case PROTMESSID_CLM_SERVER_LIST:
|
||||||
// TODO
|
bRet = EvaluateCLServerListMes ( InetAddr, vecData );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROTMESSID_CLM_REQ_SERVER_LIST:
|
case PROTMESSID_CLM_REQ_SERVER_LIST:
|
||||||
|
@ -1126,20 +1138,15 @@ void CProtocol::CreateCLRegisterServerMes ( const CHostAddress& InetAddr,
|
||||||
{
|
{
|
||||||
int iPos = 0; // init position pointer
|
int iPos = 0; // init position pointer
|
||||||
|
|
||||||
// current string sizes
|
|
||||||
const int iNameLen = ServerInfo.strName.size();
|
|
||||||
const int iTopicLen = ServerInfo.strTopic.size();
|
|
||||||
const int iCityLen = ServerInfo.strCity.size();
|
|
||||||
|
|
||||||
// size of current message body
|
// size of current message body
|
||||||
const int iEntrLen =
|
const int iEntrLen =
|
||||||
2 /* country */ +
|
2 /* country */ +
|
||||||
1 /* number of connected clients */ +
|
1 /* number of connected clients */ +
|
||||||
1 /* maximum number of connected clients */ +
|
1 /* maximum number of connected clients */ +
|
||||||
1 /* is permanent flag */ +
|
1 /* is permanent flag */ +
|
||||||
2 /* name string size */ + iNameLen +
|
2 /* name string size */ + ServerInfo.strName.size() +
|
||||||
2 /* topic string size */ + iTopicLen +
|
2 /* topic string size */ + ServerInfo.strTopic.size() +
|
||||||
2 /* city string size */ + iCityLen;
|
2 /* city string size */ + ServerInfo.strCity.size();
|
||||||
|
|
||||||
// build data vector
|
// build data vector
|
||||||
CVector<uint8_t> vecData ( iEntrLen );
|
CVector<uint8_t> vecData ( iEntrLen );
|
||||||
|
@ -1245,16 +1252,75 @@ bool CProtocol::EvaluateCLRegisterServerMes ( const CHostAddress& InetAddr,
|
||||||
void CProtocol::CreateCLServerListMes ( const CHostAddress& InetAddr,
|
void CProtocol::CreateCLServerListMes ( const CHostAddress& InetAddr,
|
||||||
const CVector<CServerInfo> vecServerInfo )
|
const CVector<CServerInfo> vecServerInfo )
|
||||||
{
|
{
|
||||||
// TODO
|
const int iNumServers = vecServerInfo.Size();
|
||||||
|
|
||||||
|
// build data vector
|
||||||
|
CVector<uint8_t> vecData ( 0 );
|
||||||
|
int iPos = 0; // init position pointer
|
||||||
|
|
||||||
|
for ( int i = 0; i < iNumServers; i++ )
|
||||||
|
{
|
||||||
|
// size of current list entry
|
||||||
|
const int iCurListEntrLen =
|
||||||
|
4 /* IP address */ +
|
||||||
|
2 /* port number */ +
|
||||||
|
2 /* country */ +
|
||||||
|
1 /* number of connected clients */ +
|
||||||
|
1 /* maximum number of connected clients */ +
|
||||||
|
1 /* is permanent flag */ +
|
||||||
|
2 /* name string size */ + vecServerInfo[i].strName.size() +
|
||||||
|
2 /* topic string size */ + vecServerInfo[i].strTopic.size() +
|
||||||
|
2 /* city string size */ + vecServerInfo[i].strCity.size();
|
||||||
|
|
||||||
|
// make space for new data
|
||||||
|
vecData.Enlarge ( iCurListEntrLen );
|
||||||
|
|
||||||
|
// IP address (4 bytes)
|
||||||
|
PutValOnStream ( vecData, iPos, static_cast<uint32_t> (
|
||||||
|
vecServerInfo[i].HostAddr.InetAddr.toIPv4Address() ), 4 );
|
||||||
|
|
||||||
|
// port number (2 bytes)
|
||||||
|
PutValOnStream ( vecData, iPos,
|
||||||
|
static_cast<uint32_t> ( vecServerInfo[i].HostAddr.iPort ), 2 );
|
||||||
|
|
||||||
|
// country (2 bytes)
|
||||||
|
PutValOnStream ( vecData, iPos,
|
||||||
|
static_cast<uint32_t> ( vecServerInfo[i].eCountry ), 2 );
|
||||||
|
|
||||||
|
// number of connected clients (1 byte)
|
||||||
|
PutValOnStream ( vecData, iPos,
|
||||||
|
static_cast<uint32_t> ( vecServerInfo[i].iNumClients ), 1 );
|
||||||
|
|
||||||
|
// maximum number of connected clients (1 byte)
|
||||||
|
PutValOnStream ( vecData, iPos,
|
||||||
|
static_cast<uint32_t> ( vecServerInfo[i].iMaxNumClients ), 1 );
|
||||||
|
|
||||||
|
// "is permanent" flag (1 byte)
|
||||||
|
PutValOnStream ( vecData, iPos,
|
||||||
|
static_cast<uint32_t> ( vecServerInfo[i].bPermanentOnline ), 1 );
|
||||||
|
|
||||||
|
// name
|
||||||
|
PutStringOnStream ( vecData, iPos, vecServerInfo[i].strName );
|
||||||
|
|
||||||
|
// topic
|
||||||
|
PutStringOnStream ( vecData, iPos, vecServerInfo[i].strTopic );
|
||||||
|
|
||||||
|
// city
|
||||||
|
PutStringOnStream ( vecData, iPos, vecServerInfo[i].strCity );
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateAndImmSendConLessMessage ( PROTMESSID_CLM_SERVER_LIST,
|
||||||
|
vecData,
|
||||||
|
InetAddr );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
bool CProtocol::EvaluateCLServerListMes ( const CHostAddress& InetAddr,
|
bool CProtocol::EvaluateCLServerListMes ( const CHostAddress& InetAddr,
|
||||||
const CVector<uint8_t>& vecData )
|
const CVector<uint8_t>& vecData )
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
|
return false; // no error
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************\
|
/******************************************************************************\
|
||||||
|
|
|
@ -203,6 +203,8 @@ protected:
|
||||||
bool EvaluateCLServerFullMes();
|
bool EvaluateCLServerFullMes();
|
||||||
bool EvaluateCLRegisterServerMes ( const CHostAddress& InetAddr,
|
bool EvaluateCLRegisterServerMes ( const CHostAddress& InetAddr,
|
||||||
const CVector<uint8_t>& vecData );
|
const CVector<uint8_t>& vecData );
|
||||||
|
bool EvaluateCLServerListMes ( const CHostAddress& InetAddr,
|
||||||
|
const CVector<uint8_t>& vecData );
|
||||||
|
|
||||||
int iOldRecID;
|
int iOldRecID;
|
||||||
int iOldRecCnt;
|
int iOldRecCnt;
|
||||||
|
|
|
@ -83,7 +83,7 @@ public:
|
||||||
0,
|
0,
|
||||||
false ) { RegisterTime.start(); }
|
false ) { RegisterTime.start(); }
|
||||||
|
|
||||||
CServerListEntry ( const CHostAddress& NIAddr,
|
CServerListEntry ( const CHostAddress& NHAddr,
|
||||||
const QString& NsName,
|
const QString& NsName,
|
||||||
const QString& NsTopic,
|
const QString& NsTopic,
|
||||||
const QLocale::Country& NeCountry,
|
const QLocale::Country& NeCountry,
|
||||||
|
@ -91,7 +91,7 @@ public:
|
||||||
const int NiNumClients,
|
const int NiNumClients,
|
||||||
const int NiMaxNumClients,
|
const int NiMaxNumClients,
|
||||||
const bool NbPermOnline)
|
const bool NbPermOnline)
|
||||||
: CServerInfo ( NIAddr,
|
: CServerInfo ( NHAddr,
|
||||||
NsName,
|
NsName,
|
||||||
NsTopic,
|
NsTopic,
|
||||||
NeCountry,
|
NeCountry,
|
||||||
|
|
|
@ -514,10 +514,10 @@ public:
|
||||||
"",
|
"",
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
false ), InetAddr ( CHostAddress() ) {}
|
false ), HostAddr ( CHostAddress() ) {}
|
||||||
|
|
||||||
CServerInfo (
|
CServerInfo (
|
||||||
const CHostAddress& NIAddr,
|
const CHostAddress& NHAddr,
|
||||||
const QString& NsName,
|
const QString& NsName,
|
||||||
const QString& NsTopic,
|
const QString& NsTopic,
|
||||||
const QLocale::Country& NeCountry,
|
const QLocale::Country& NeCountry,
|
||||||
|
@ -531,11 +531,11 @@ public:
|
||||||
NsCity,
|
NsCity,
|
||||||
NiNumClients,
|
NiNumClients,
|
||||||
NiMaxNumClients,
|
NiMaxNumClients,
|
||||||
NbPermOnline ), InetAddr ( NIAddr ) {}
|
NbPermOnline ), HostAddr ( NHAddr ) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// internet address of the server
|
// internet address of the server
|
||||||
CHostAddress InetAddr;
|
CHostAddress HostAddr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue