예제 #1
0
파일: ASE.cpp 프로젝트: 50p/multitheftauto
void ASE::DoPulse ( void )
{
    sockaddr_in SockAddr;
#ifndef WIN32
	socklen_t nLen = sizeof ( sockaddr );
#else
    int nLen = sizeof ( sockaddr );
#endif

    char szBuffer[2];
    int iBuffer = 0;

    // We set the socket to non-blocking so we can just keep reading
    iBuffer = recvfrom ( m_Socket, szBuffer, 1, 0, (sockaddr*)&SockAddr, &nLen );
    if ( iBuffer > 0 )
    {
        std::string strReply;

        switch ( szBuffer[0] )
        {
            case 's':
            { // ASE protocol query
                strReply = QueryFull ();
                break;
            }
            case 'b':
            { // Our own lighter query for ingame browser
                strReply = QueryLight ();
                break;
            }
            case 'r':
            { // Our own lighter query for ingame browser - Release version only
                strReply = QueryLight ();
                break;
            }
            case 'v':
            { // MTA Version (For further possibilities to quick ping, in case we do multiply master servers)
                strReply = MTA_DM_ASE_VERSION;
                break;
            }
            default:
                return;
        }

        // If our reply buffer isn't empty, send it
        if ( !strReply.empty() )
        {
            /*int sent =*/ sendto ( m_Socket,
                                strReply.c_str(),
                                strReply.length(),
						        0,
						        (sockaddr*)&SockAddr,
						        nLen );
        }
    }
}
예제 #2
0
// Protect against a flood of server queries.
// Send cached version unless player count has changed, or last re-cache is older than m_lFullMinInterval
const std::string* ASE::QueryFullCached ( void )
{
    if ( m_uiCurrentPlayerCount != m_uiFullLastPlayerCount || m_llCurrentTime - m_llFullLastTime > m_lFullMinInterval || m_strFullCached == "" )
    {
        m_strFullCached = QueryFull ();
        m_llFullLastTime = m_llCurrentTime;
        m_uiFullLastPlayerCount = m_uiCurrentPlayerCount;
    }
    return &m_strFullCached;
}
예제 #3
0
파일: ASE.cpp 프로젝트: qaisjp/green-candy
// Protect against a flood of server queries.
// Send cached version unless player count has changed, or last re-cache is older than m_lFullMinInterval
const std::string& ASE::QueryFullCached ( void )
{
    long long llTime = GetTickCount64_ ();
    unsigned int uiPlayerCount = m_pPlayerManager->CountJoined ();
    if ( uiPlayerCount != m_uiFullLastPlayerCount || llTime - m_llFullLastTime > m_lFullMinInterval || m_strFullCached == "" )
    {
        m_strFullCached = QueryFull ();
        m_llFullLastTime = llTime;
        m_uiFullLastPlayerCount = uiPlayerCount;
    }
    return m_strFullCached;
}