2016-04-30 112 views
2

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

我对此做了大量的研究,但无法得到一个坚实的解释。这可能是一个复制或跛脚的问题,所有的专家在这里,请 熊与我。

回答

2

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

+0

这是对广播消息的先生? – OLDMONK

+0

它会广播给所有谁连接...给你的应用程序。只要尝试一下,如果它不工作,然后让我知道。 –

+0

好吧,先生,我正在给它一个try..will让你知道 – OLDMONK

相关问题