我正在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
}
}
答案 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];