私はこの問題を解決します。これは、蒸気からの特定のイベントを聞くことを可能にする私の実装の単純化です。
class SteamCallbacksListener
{
private:
STEAM_CALLBACK(SteamCallbacksListener, onSteamServersConnected, SteamServersConnected_t, mSteamConnectedListener);
STEAM_CALLBACK(SteamCallbacksListener, onSteamServersDisconnected, SteamServersDisconnected_t, mSteamDisconnectedListener);
STEAM_CALLBACK(SteamCallbacksListener, onSteamServerConnectFailure, SteamServerConnectFailure_t, mSteamConnectFilureListener);
SteamCallbacksListener();
SteamCallbacksListener(const SteamCallbacksListener& _copy);
~SteamCallbacksListener();
public:
static SteamCallbacksListener* getInstance()
{
static SteamCallbacksListener instance;
return &instance;
}
};
SteamCallbacksListener::SteamCallbacksListener()
: mSteamConnectedListener(this, &SteamCallbacksListener::onSteamServersConnected)
, mSteamDisconnectedListener(this, &SteamCallbacksListener::onSteamServersDisconnected)
, mSteamConnectFilureListener(this, &SteamCallbacksListener::onSteamServerConnectFailure)
{
}
SteamCallbacksListener::~SteamCallbacksListener()
{
}
void SteamCallbacksListener::onSteamServersConnected(SteamServersConnected_t* _pParam)
{
}
void SteamCallbacksListener::onSteamServersDisconnected(SteamServersDisconnected_t* _pParam)
{
if(_pParam)
{
switch(_pParam->m_eResult)
{
case k_EResultAlreadyLoggedInElsewhere:
case k_EResultLoggedInElsewhere:
case k_EResultPasswordRequiredToKickSession:
{
log("This client already logged in. Error!");
}
break;
};
}
}