【问题标题】:Send a broadcast POP-UP Message to All the Connected Clients向所有连接的客户端发送广播 POP-UP 消息
【发布时间】:2016-04-30 16:01:45
【问题描述】:

我正在使用 C# 在 ASP.NET WebForms 中构建(仍在学习)一个 Web 应用程序。我们有一个集中式数据库,所有客户端都通过相同的静态 IP 连接到数据库。每个客户端都有自己的 唯一的办公室 ID。我们有 16 个办公室,每个办公室都有自己的办公室 ID。每天我们都会使用新版本更新新功能。而不是发送聊天消息 向个别客户提供有关新更改/更新/功能的信息,我们能否将其作为广播消息发送,就像我提到的所有办公室一样 有一个 OfficeId=14 的公司办公室。所以当其他办公室的用户登录时,他/她应该会看到一个弹出通知消息 关于更改。是否可以说一个表格来输入有关更改的详细信息,并且公司办公室的用户保存它的那一刻,它会显示在索引页面中 所有的客户?

我对此进行了大量研究,但无法得到可靠的解释。对于这里的所有专家来说,这可能是一个重复或蹩脚的问题,拜托 忍受我。

【问题讨论】:

    标签: c# jquery asp.net ajax signalr


    【解决方案1】:

    查看此链接ASP.Net SignalR: Building a Simple Real-Time Chat Application

    来自 ChatHub 类并使用以下代码。

     public class ChatHub : Hub
    {
        static ConcurrentDictionary<string, string> dic = new ConcurrentDictionary<string, string>();
    
        public void Send(string name, string message)
        {
            Clients.All.broadcastMessage(name, message);
        }
    
    
    
        public void Notify(string name, string id)
        {
            if (dic.ContainsKey(name))
            {
                Clients.Caller.differentName();
            }
            else
            {
                dic.TryAdd(name, id);
                foreach (KeyValuePair<String, String> entry in dic)
                {
                    Clients.Caller.online(entry.Key);
                }
                Clients.Others.enters(name);
            }
        }
    
        public override Task OnDisconnected()
        {
            var name = dic.FirstOrDefault(x => x.Value == Context.ConnectionId.ToString());
            string s;
            dic.TryRemove(name.Key, out s);
            return Clients.All.disconnected(name.Key);
        }
    
    }
    

    在 HTML + javascript 中

       <script type="text/javascript">
    
              $(function () {
                  showModalUserNickName();
              });
    
              function showModalUserNickName() {
                  $("#dialog").dialog({
                      modal: true,
                      buttons: {
                          Ok: function () {
                              $(this).dialog("close");
                              startChartHub();
                          }
                      }
                  });
              }
    
              function startChartHub() {
                  var chat = $.connection.chatHub;
    
                  // Get the user name.
                  $('#nickname').val($('#nick').val());
                  chat.client.differentName = function (name) {
                      showModalUserNickName();
                      return false;
                      // Prompts for different user name
                      $('#nickname').val($('#nick').val());
                      chat.server.notify($('#nickname').val(), $.connection.hub.id);
                  };
    
                  chat.client.online = function (name) {
                      // Update list of users
                      if (name == $('#nickname').val())
                          $('#onlineusers').append('<div class="border" style="color:green">You: ' + name + '</div>');
                      else {
                          $('#onlineusers').append('<div class="border">' + name + '</div>');
                      }
                  };
    
                  chat.client.enters = function (name) {
                      $('#chatlog').append('<div style="font-style:italic;"><i>' + name + ' joins the conversation</i></div>');
                      $('#onlineusers').append('<div class="border">' + name + '</div>');
                  };
                  // Create a function that the hub can call to broadcast chat messages.
                  chat.client.broadcastMessage = function (name, message) {
                      //Interpret smileys
                      message = message.replace(":)", "<img src=\"/images/smile.gif\" class=\"smileys\" />");
                      message = message.replace("lol", "<img src=\"/images/laugh.gif\" class=\"smileys\" />");
                      message = message.replace(":o", "<img src=\"/images/cool.gif\" class=\"smileys\" />");
    
                      //display the message
                      $('#chatlog').append('<div class="border"><span style="color:red">' + name + '</span>: ' + message + '</div>');
                  };
    
                  chat.client.disconnected = function (name) {
                      //Calls when someone leaves the page
                      $('#chatlog').append('<div style="font-style:italic;"><i>' + name + ' leaves the conversation</i></div>');
                      $('#onlineusers div').remove(":contains('" + name + "')");
                  }
    
                  // Start the connection.
                  $.connection.hub.start().done(function () {
                      //Calls the notify method of the server
                      chat.server.notify($('#nickname').val(), $.connection.hub.id);
    
                      $('#btnsend').click(function () {
    
                              // Call the Send method on the hub. 
                              chat.server.send($('#nickname').val(), $('#message').val());
    
                          // Clear text box and reset focus for next comment. 
                          $('#message').val('').focus();
                      });
    
                  });
              }
    
            </script>
    <div id="container">
    <input type="hidden" id="nickname" />
    <div id="chatlog"></div>
    <div id="onlineusers">
        <b>Online Users</b>
    </div>
    <div id="chatarea">
        <div class="messagelog">
            <textarea spellcheck="true" id="message" class="messagebox"></textarea>
        </div>
        <div class="actionpane">
            <input type="button" id="btnsend" value="Send" />
        </div>
        <div class="actionpane">
    
        </div>
    </div>
    <div id="dialog" title="Enter your name to start a chat.">
        <input type="text" id="nick" />
    </div>
    

    【讨论】:

    • 这是广播消息先生吗?
    • 它将广播给所有连接到你的应用程序的人。试试吧,如果它不起作用,请告诉我。
    • 好的先生,我试试看..会告诉你的
    • 没有工作先生。发送按钮没有触发
    • 您是否将以下行添加到您的代码中 @section scripts{ @Scripts.Render("~/Scripts/jquery-ui-1.9.2.min.js") @Scripts.Render(" ~/Scripts/jquery.signalR-1.0.1.min.js") @Scripts.Render("/signalr/hubs") }
    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 2019-09-20
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多