Сигнал R mvc не работает в браузере iphone - PullRequest
0 голосов
/ 05 апреля 2020

Я создал чат с сигнализатором в mvc.

Я добавляю скрипты в виде чата.

 <script>
    $(function () {
        // Declare a proxy to reference the hub.
        var chatHub = $.connection.chatHub;
        $.connection.hub.logging = true;

        chatHub.client.SendMessage = function (message) {
            $("#chatbox").append(
                ' <div class="dc-msg slideInright right"><img class="dc-img" src="../../Images/profile.png"><div class="dc-text">' +
                message +
                ' </div></div>');
        };


        $.connection.hub.start().done(function () {
            console.log('Now connected, connection ID=' + $.connection.hub.id);
        })
            .fail(function () { console.log('Could not connect'); });
    });
</script>

и в классе хаба

 public class ChatHub : Hub
{
    private static readonly ConcurrentDictionary<string, UserHubModel> Users =
        new ConcurrentDictionary<string, UserHubModel>();

    static DoctorbamaContext _db = new DoctorbamaContext();

    public static void SendMessage(int userId, string message)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
        var conList = new List<string>();
        var user = _db.UserProfiles.Find(userId);

        var hasList = Users.SingleOrDefault(m => m.Key == user.UserName);
        if (hasList.Value != null)
            foreach (var has in hasList.Value.ConnectionIds)
            {
                conList.Add(has);
            }
        hubContext.Clients.Clients(conList).SendMessage(message);
    }

    public override Task OnConnected()
    {
        var userName = Context.User.Identity.Name;
        string connectionId = Context.ConnectionId;

        var user = Users.GetOrAdd(userName, _ => new UserHubModel
        {
            UserId = userName,
            ConnectionIds = new HashSet<string>()
        });

        lock (user.ConnectionIds)
        {
            user.ConnectionIds.Add(connectionId);
            if (user.ConnectionIds.Count == 1)
            {
                Clients.Others.userConnected(userName);
            }
        }

        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        var userName = Context.User.Identity.Name;
        string connectionId = Context.ConnectionId;

        UserHubModel user;
        Users.TryGetValue(userName, out user);

        if (user != null)
        {
            lock (user.ConnectionIds)
            {
                user.ConnectionIds.RemoveWhere(cid => cid.Equals(connectionId));
                if (!user.ConnectionIds.Any())
                {
                    UserHubModel removedUser;
                    Users.TryRemove(userName, out removedUser);
                    Clients.Others.userDisconnected(userName);
                }
            }
        }

        return base.OnDisconnected(stopCalled);
    }
}

это нормально во всех браузерах в p c и android телефоне,

, но не работают в iphone браузере.

...