Ну, это действительно интересная ошибка в нашем приложении. У нас есть класс для каждого онлайн-игрока, где мы храним его данные
public class Connection
{
public int PlayerId { get; set; }
public string ConnectionId { get; set; }
public List<int> Friends { get; set; }
}
Когда один игрок выходит в оффлайн или онлайн, мы уведомляем других с обновленным счетом онлайн-друзей, например:
public void NotifyMyOnlineFriendsCount(Connection connection)
{
int onlineFriends = CalculateOnlineFriends(connection.Friends);
connection.OnlineFriendCount = onlineFriends;
_hubContext.Clients.Client(connection.ConnectionId).SetOnlineFriends(new FriendsNotification() { OnlineFriendsCount = onlineFriends, TotalFriendsCount = connection.Friends.Count });
}
this is CalculateOnlineFriends:
public int CalculateOnlineFriends(List<int> friends)
{
int onlineFriendsCount = 0;
if (friends != null && friends.Count > 0)
{
lock (_connectionsLocker)
{
onlineFriendsCount = connections.Where(o => friends.Contains(o.PlayerId)).Count();
}
}
return onlineFriendsCount;
}
Иногда TotalFriendsCount
отправляет неверных друзей Totalcount. Если реальное число ex: 14, оно отправляет 114 или 214. Где может быть проблема? Спасибо
Обновление: этот метод внутри Singleton, но я не изменяю List<int> Friends
во время сеанса.