2016-04-30 115 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

相關問題