/// <summary> /// 向用户列表中的在线用户推送信息 /// </summary> /// <param name="p_userIDs">用户列表</param> /// <param name="p_msg">待推送信息</param> /// <returns>在线推送列表</returns> public static async Task <List <long> > Push(List <long> p_userIDs, MsgInfo p_msg) { if (p_userIDs == null || p_userIDs.Count == 0 || p_msg == null) { throw new Exception("待推送的用户或信息不可为空!"); } var onlines = new List <long>(); var offlines = new List <long>(); string onlineMsg = p_msg.GetOnlineMsg(); int cnt = await Kit.GetSvcReplicaCount(); if (cnt > 1) { // Msg服务多副本推送 await PushMultipleReplicas(p_userIDs, onlineMsg, onlines, offlines, cnt); } else { // 本地单副本推送 PushLocal(p_userIDs, onlineMsg, onlines, offlines); } // 离线 if (offlines.Count > 0) { // 将消息保存到用户的未推送列表 var lc = new ListCache <string>(MsgQueueKey); foreach (long id in offlines) { await lc.RightPush(id, onlineMsg); } // 推送离线提醒 if (!string.IsNullOrEmpty(p_msg.Title)) { Offline.Add(offlines, p_msg); } } return(onlines); }