如何使用SignalR将消息从服​​务器推送到客户端

时间:2016-06-15 07:12:09

标签: c# ios asp.net objective-c signalr

我正在iOS中创建群聊应用程序。所以在客户端(iOS)我们集成了signalR框架。在服务器端,我在ASP.Net中集成了signalR框架。

我的疑问是,我想将聊天消息从服务器发送到iPhone。所以在服务器端我正在创建一个ASP.Net SignalR Hub。如何从服务器向客户端(iPhone)发送消息。

// in server side i am writing like this

using System;
using System.Collections.Generic;    
using System.Linq;    
using System.Web;    
using Microsoft.AspNet.SignalR;    
namespace ProjectName    
{    
    public class ChatHub : Hub    
    {    
        #region Data Members

        public void Connect(string myData)    
        {    
            var id = Context.ConnectionId;

            // send to caller    
            Clients.Caller.onConnected(myData);

            // send to all except caller client    
            Clients.AllExcept(id).onNewUserConnected(myData));     
        }
  
        public void SendMessageToAll(string myData)     
        {      
            // Broad cast message      
            Clients.All.messageReceived(myData);     
        }
  
        public void SendPrivateMessage(string toUserId, string message)     
        {       
            string fromUserId = Context.ConnectionId;
   
            if (toUserId!= null && fromUserId !=null)        
            {           
                // send to            
                Clients.Client(toUserId).sendPrivateMessage(fromUserId, message); 

                // send to caller user         
                Clients.Caller.sendPrivateMessage(toUserId,message);        
            }     
        }

        public override Task OnDisconnected(bool stopCalled)   
        {           
            var id = Context.ConnectionId;
       
            Clients.All.onUserDisconnected(id);

            return base.OnReconnected();        
        }

        public void SendMessageToGroup(string myData)   
        {         
            groupID = "1";
     
            Clients.Group(groupID).getMessages(myData);        
        }
     
        #endregion

    }    
}

1 个答案:

答案 0 :(得分:1)

这很简单。其实你已经做到了。

public Task SendMessage(string message)
{
    Clients.AllExcept(Context.ConnectionId).MessageReceived(message);
}

现在您需要在客户端集线器代理中收听“MessageRecieved”。

如果应用程序是后台运行且SignalR仍然连接(这是一个很大的IF),您可以发送本地通知(在iOS设备中)

UILocalNotification* localNotification = [[UILocalNotificationalloc] init]; 
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:60];
localNotification.alertBody = @"Your alert message";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

Read more about local notifications