c# - 向所有连接的客户端发送广播 POP-UP 消息

标签 c# jquery asp.net ajax signalr

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

我对此做了很多研究,但无法得到可靠的解释。对于这里的所有专家来说,这可能是一个重复或蹩脚的问题,请 请耐心等待。

最佳答案

检查此链接 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>

关于c# - 向所有连接的客户端发送广播 POP-UP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36951632/

相关文章:

c# - 如何将 System.IO.Stream 转换为图像?

c# - 在 ViewPage 中呈现的 ASP.NET MVC ViewPage

c# - 在 UserControl 中绑定(bind)

javascript - 为每个第三个元素添加类并排除具有 X 类的元素

c# - 正则表达式不匹配单词边界之间的哈希字符

javascript - Ajax 附加元素不会与 masonry.js 定位的类似元素对齐

javascript - 悬停时以表格格式显示隐藏值的工具提示

asp.net - RadioButton 和 Checkbox 有键盘快捷键吗?

c# - 从 HTTPRuntime 缓存中检索图像

c# - 在 Asp.Net 中回发时检索动态创建的控件的值