SignalR给指定用户id的用户推送信息

前台处理方式:

//连接成功后设置自己的信息
Userpush= $.connection.Userpush;
//允许跨域
$.connection.hub.start({ xdomain: true })
  //给当前链接设置用户信息
  .done(function () {
      //参数:用户名、用户id
      Userpush.server.getSetUserInfo(用户名,用户id);
  });

后台处理方式

1.创建实体类

/// <summary>
/// 用户实体类
/// </summary>
public class User
{
    /// <summary>
    /// 连接ID
    /// </summary>
    [Key]
    public string ConnectionID { get; set; }

    /// <summary>
    /// 用户名称
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 用户id
    /// </summary>
    public int Id { get; set; }

    public User(string name, int id ,string connectionId)
    {
        this.Name = name;
        this.Id = id;
        this.ConnectionID = connectionId;
    }
}

2.自定义处理方法,主要为GetSetUserInfo方法

//userpush为前台链接推送时候指定的服务器名,每实例化一个都可以新建一个
[HubName("Userpush")]
public class PushHub : Hub
{
    //创建用户集合,用于存储所有链接的用户数据
    public static List<User> users = new List<User>();

    //给指定用户发送消息
    public void SendMessage(string userId, string message)
    {
        Clients.All.hello();
        var user = users.Where(s => s.Id== userId).FirstOrDefault();
        if (user != null)
        {
            Clients.Client(user.connectionId).addMessage(message + "" + DateTime.Now, Context.ConnectionId);
            //给自己发送,把用户的ID传给自己
            Clients.Client(Context.ConnectionId).addMessage(message + "" + DateTime.Now, user.connectionId);
        }
        else
        {
            Clients.Client(Context.ConnectionId).showMessage("该用户已离线...");
        }
    }
	
	// <summary>
    ///给当前连接绑定用户信息
    /// </summary>
    [HubMethodName("getSetUserInfo")]
    public void GetSetUserInfo(string name, int uid = 0)
    {
        //查询用户
        var user = users.SingleOrDefault(u => u.ConnectionID == Context.ConnectionId);
        if (user != null)
        {
            user.Name = name;
            user.Id = uid;
            Clients.Client(Context.ConnectionId).showId(Context.ConnectionId);
        }
    }

    /// <summary>
    /// 重写连接事件
    /// </summary>
    /// <returns></returns>
    public override Task OnConnected()
    {
        //查询用户
        var user = users.Where(u => u.ConnectionID == Context.ConnectionId).SingleOrDefault();
        //判断用户是否存在,否则添加集合
        if (user == null)
        {
            user = new User("", 0, Context.ConnectionId);
            users.Add(user);
        }
        return base.OnConnected();
    }
	/// <summary>
    /// 重写断开连接事件
    /// </summary>
    /// <returns></returns>
    public override Task OnDisconnected(bool stopCalled)
    {
        var user = users.Where(p => p.ConnectionID == Context.ConnectionId).FirstOrDefault();
        //判断用户是否存在,存在则删除
        if (user != null)
        {
            //删除用户
            users.Remove(user);
        }
        return base.OnDisconnected(stopCalled);
    }
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值