C# 使用Steamworks.NET包装时不会触发回调

C# 使用Steamworks.NET包装时不会触发回调,c#,callback,steamworks-api,C#,Callback,Steamworks Api,我试图四处走动,了解如何正确使用Steamworks.NET C#wrapper,因为我想将它与我的discord机器人一起使用。现在,大多数函数都可以工作,它使用普通的回调方法。当我试图使用三个具有相同回调接口的方法时,我遇到了麻烦,没有一个方法会触发回调。因此,在ISteamMatchmakinServers界面中,我想使用三种方法-PlayerDetails、PingServer、ServerRules来获得您需要使用这些界面的响应ISteamMatchmakingPingResponse

我试图四处走动,了解如何正确使用Steamworks.NET C#wrapper,因为我想将它与我的discord机器人一起使用。现在,大多数函数都可以工作,它使用普通的回调方法。当我试图使用三个具有相同回调接口的方法时,我遇到了麻烦,没有一个方法会触发回调。因此,在
ISteamMatchmakinServers
界面中,我想使用三种方法-
PlayerDetails、PingServer、ServerRules
来获得您需要使用这些界面的响应
ISteamMatchmakingPingResponse、ISteamMatchmakingPlayersResponse、isteammatchmakingtrules response
。在官方蒸汽工程文件中,其规定:

You must inherit from the ISteamMatchmakingRulesResponse object to receive this callback.

Callback interface for receiving responses after pinging an individual server.

If you are destructing an object that implements this interface then you should
call CancelServerQuery passing in the handle to the query which is in progress.
Failure to cancel in progress queries when destructing a callback handler may
result in a crash when a callback later occurs.
现在,如果我将Unity与它的Mono脚本一起使用,并将接口放在继承方法的OnEnable方法中,这些接口确实会被触发

public void OnEnable(){
m_ServerListRequest=hsServerListRequest。无效;
m_ServerQuery=hsserverquery.Invalid;
m_ServerListResponse=新的ISteamMatchmakingServerListResponse(OnServerResponsed,
OnServerFailedToRespond、OnRefreshComplete);
m_PingResponse=新的ISteamMatchmakingPingResponse(OnServerResponsed,
OnServerFailedToRespond);
m_PlayerResponse=新的ISTEAMMatching PlayerResponse(OnAddPlayerToList,OnPlayerFailedToRespond,
OnPlayerRefreshComplete);
m_Rules Response=新的ISTEAMMatching规则响应(OnRules Response,
OnRules失败响应,OnRules刷新完成);
}
现在,我的想法是,只有当用户使用
.server
命令时,我才需要这些方法,因此我执行与上面相同的操作,只需将继承放在命令调用的开头。然后我触发这个方法,得到响应,但是这次没有调用回调,所以我无法访问信息。我的代码:

公共类命令:ModuleBase{
CSteamID m_大厅;
专用HServerQuery m_ServerQuery;
私人ISteamMatchingMakingPingResponse Mu PingResponse;
私人ISteamMatchingPlayersResponse m_PlayersResponse;
私有ISTAMMATCHING规则响应MU规则响应;
方法:

[命令(“服务器”)]
公共异步任务服务器(int serverNumber)
{
m_ServerListRequest=hsServerListRequest。无效;
m_ServerQuery=hsserverquery.Invalid;
m_ServerListResponse=新的ISteamMatchmakingServerListResponse(OnServerResponsed,
OnServerFailedToRespond、OnRefreshComplete);
m_PingResponse=新的ISteamMatchmakingPingResponse(OnServerResponsed,
OnServerFailedToRespond);
m_PlayerResponse=新的ISTEAMMatching PlayerResponse(OnAddPlayerToList,OnPlayerFailedToRespond,
OnPlayerRefreshComplete);
m_Rules Response=新的ISTEAMMatching规则响应(OnRules Response,
OnRules失败响应,OnRules刷新完成);
如果(服务器号==422){
m_大厅=(CSteamID)90130468311942151;
}
回调在命令类中

服务器响应的私有void(hsServerListRequest hRequest,int-iServer){
Log(“onServerResponsed:”+hRequest+“-”+iServer);
}
ServerFailedToRespond上的私有无效(hsServerListRequest hRequest,int iServer){
Log(“OnServerFailedToRespond:+hRequest+”-“+iServer”);
}
私有void OnRefreshComplete(hsServerListRequest hRequest,EMatchMakingServerResponse){
Log(“OnRefreshComplete:+hRequest+”-“+response”);
}
//ISTEAMMatchingping响应
服务器上的私有无效已响应(gameserveritem\u t gsi){
Log(“OnServerResponsed:”+gsi+“\n”+GameServerItemFormattedString(gsi));
}
ServerFailedToRespond()上的私有无效{
Log(“OnServerFailedToRespond”);
}
//ISteamMatchingPlayers响应
ADDPLAYERTOLIST上的私有void(字符串pchName、int nScore、float flTimePlayed){
Log(“OnAddPlayerToList:+pchName+”-“+nScore+”-“+flTimePlayed”);
}
未通过响应的玩家的私有无效(){
Log(“OnPlayerFailedToRespond”);
}
私有void OnPlayersRefreshComplete(){
Log(“OnPlayerRefreshComplete”);
}
//ISTAMMATCH制定规则响应
响应的私有void onRules(字符串pchRule、字符串pchValue){
Log(“onrules响应:+pchRule+”-“+pchValue”);
}
private void on Rules失败响应(){
Log(“OnRulesFailedToRespond”);
}
私有void OnRulesRefreshComplete(){
Log(“OnRulesRefreshComplete”);
}

创建了另一个每50毫秒运行一次的方法,该方法调用
SteamAPI.RunCallbacks();
,现在回调被正确调用了。

!谢谢!这也让我发疯了!经过数小时的调试和搜索,我找不到任何解决方案,直到我找到它为止!再次感谢!