我一直在嘗試使用SignalR,它非常整潔。基本上我想達到的是:SignalR - 發送消息OnConnected
一旦設備連接它應該發送一條消息到第一個。如果有超過1個連接的設備,我想發送兩條消息。一個到所有,但最後連接的客戶端爲。還有一條消息,只有上次連接的客戶端。
當我將它放在一個自定義的API控制器中並且基本上調用該操作時,我一直使用的代碼很完美,但那不是我想要的。
我想在沒有任何用戶交互的情況下,儘快在OnConnected
之內連接設備時發送消息,但是當我將代碼放入OnConnected
覆蓋範圍內時,它將停止工作。它不再發送給特定客戶端(首先連接並且最後連接)。
我希望有人能夠幫助我解決這個問題,因爲我現在一直在敲我的頭幾個小時。
public override System.Threading.Tasks.Task OnConnected()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId, UserHandler.ConnectedIds.Count + 1);
int amountOfConnections = UserHandler.ConnectedIds.Count;
var lastConnection = UserHandler.ConnectedIds.OrderBy(x => x.Value).LastOrDefault();
var allExceptLast = UserHandler.ConnectedIds.Take(amountOfConnections - 1).Select(x => x.Key).ToList();
if (amountOfConnections == 1)
{
Clients.Client(UserHandler.ConnectedIds.First().Key).hello("Send to only(also first) one");
}
else
{
Clients.Clients(allExceptLast).hello("Send to everyone except last");
Clients.Client(lastConnection.Key).hello("Send to only the last one");
}
return base.OnConnected();
}
非常感謝這個代碼。它實際上使我的代碼更容易! – Mittchel