Взаимодействие с# кода и Js скрипта с SignalR

312
05 сентября 2017, 12:17

Здравствуйте. Пытаюсь понять взаимодействие метода с# и функции js скрипта.

Js скрипт:

   $(function () {
    var chat = $.connection.myHub;

    $.connection.hub.start().done(function () {
        $('#mybutton').click(function () {
            var message = 'Hello';
            chat.server.send(message);
            chat.client.addMessage = function (returnmessage) {
                $('#mytext').text(returnMessage);
            }
        });
    });
})

КОД НА С#:

    namespace ChatSignal
{
    [HubName("myHub")]
    public class MyHub : Hub
    {    
        public void Send(string message)
        {
            Clients.All.addMessage(message);
        }
    }
}

КОД HTML:

    <html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div id="mytext"> 
    </div>
    <button id="mybutton">Click</button>
    <script src="~/Scripts/jquery-1.6.4.js"></script>
    <script src="~/Scripts/jquery.signalR-2.2.2.js"></script>
    <script src="~/signalr/hubs"></script>
    <script src="~/Scripts/MyFile.js"></script>
</body>
</html>

Переменную на сервер я получаю...но в скриптовый метод addMessage я её не возвращаю...почему?

Answer 1

Не совсем ясен ваш вопрос. Попробую объяснить, что происходит в данном коде, хотя знатоком упомянутых технологий и не являюсь.

После того как вы установили соединение с сервером:

$.connection.hub.start().done(function () {

вы добавляете обработчик нажатия кнопки отправки сообщения

   $('#mybutton').click(function () {
        var message = 'Hello';
        chat.server.send(message);
        .... 
    });

Теперь при нажатии кнопки #mybutton, вы отправляете сообщение hello серверу (chat.server), используя метод send. С серверной стороны имеется одноименный метод, который соответственно и вызывается:

public void Send(string message)
{
    Clients.All.addMessage(message);
}

Здесь сервер получил сообщение и отправляет его всем клиентам (Clients.All), методом addMessage. Теперь на стороне всех клиентов должен обработаться js-метод addMessage.

Обработчик данного метода на стороне клиента вы установили (вопрос вызывает только место, где это происходит):

        chat.client.addMessage = function (returnmessage) {
            $('#mytext').text(returnMessage);
        }

И вот когда сервер отправил всем сообщение, вызывается этот обработчик события, который и добавляет строку, полученную от сервера (и ранее принятую им от вас) к #mytext. Этот метод будет срабатывать для всех входящих сообщений чата, в т.ч. от других клиентов.

На этом в общем-то все и заканчивается. Вопрос возникает только к тому, что назначение обработчика chat.client.addMessage происходит при первой отправке сообщения. В связи с этим, вы не увидите ни одного входящего сообщения, пока не отправите в чат что-нибудь сами.

READ ALSO
Функция map не принимает json-файл

Функция map не принимает json-файл

Я пытаюсь подключить свой довольно большой json-файл и вывести из него информацию в react, но получаю ошибкуmap is not a function

243
Как сделать пропуск ошибок в gulp?

Как сделать пропуск ошибок в gulp?

Есть gulpfilejs, он работает хорошо, но есть одно но

307
Мега меню с помощью jQuery UI

Мега меню с помощью jQuery UI

Делаю меню на jQuery UIКак сделать, чтобы все подпункты были сверху на одной линии?

310