/// <summary> /// 群主-加人 /// </summary> /// <param name="model"></param> /// <returns></returns> public object GM_AddUsers(IGM_AddUsers model) { var mOGM_AddUsers = new OGM_AddUsers(); var group = new IM_Group(); var users_add = new List <IM_User>(); var db_result = 0; using (var db = new ModelAC()) { #region db group = db.IM_Group.SingleOrDefault(p => p.App_Id == APP_GUID && p.GroupId == model.GroupId); users_add = db.IM_User.Where(p => p.App_Id == APP_GUID && model.Accounts.Contains(p.UserId)).ToList(); foreach (var user in users_add) { var mIm_UserGroup = new Im_UserGroup(); mIm_UserGroup.IM_User_Id = user.Id; mIm_UserGroup.IM_Group_Id = group.Id; mIm_UserGroup.GroupPosition = IM_GroupPosition.Memeber; db.Im_UserGroup.Add(mIm_UserGroup); } db_result = db.SaveChanges(); #endregion } if (db_result > 0) { mOGM_AddUsers.Success = true; mOGM_AddUsers.Msg = "添加群成员成功!"; #region 连接组维护 var app_accounts = users_add.Select(p => HubKey.App__Account(app: APP, account: p.UserId)).ToList(); var connectionIDs = Base_GetConnectionIds(app_accounts); foreach (var connectionId in connectionIDs) { //将连接添加到指定的组 Groups.Add(connectionId, group.Id.ToString()); } #endregion #region 更新相关群组聊表信息-发送系统通知 Update_GM_AddUsers(group); #endregion return(CommonJson.camelObject(mOGM_AddUsers)); } else { mOGM_AddUsers.Success = false; mOGM_AddUsers.Msg = "添加群成员失败!"; return(CommonJson.camelObject(mOGM_AddUsers)); } }
/// <summary> /// 发送-图片消息 /// </summary> /// <returns></returns> public object Group_SendPicture(IGroup_SendText model) { var user = LOGIN_USER; var msg = new IM_MsgGroup(); var db_result = 0; using (var db = new ModelAC()) { #region db msg.App_Id = APP_GUID; msg.MsgClientId = model.MsgClientId; msg.From_UserId = user.Id; msg.To_GroupId = db.IM_Group.SingleOrDefault(p => p.App_Id == APP_GUID && p.GroupId == model.To_GroupId).Id; msg.MsgTime = DateTime.Now; msg.IsFullRead = false; msg.MsgType = model.MsgType; msg.MsgBody = model.MsgBody; db.IM_MsgGroup.Add(msg); db_result = db.SaveChanges(); #endregion } var session_result = Group_updateSession(msg); if (db_result == 1) { var mOGroup_SendText = new OGroup_SendText() { #region 输出 Id = msg.Id.ToString(), MsgClientId = msg.MsgClientId, From_UserId = model.From_UserId, //From_UserImg = SITE_URL + user.PortraitUri, To_GroupId = model.To_GroupId, MsgTime = msg.MsgTime, IsFullRead = msg.IsFullRead, MsgType = msg.MsgType, MsgBody = msg.MsgBody, #endregion }; var jsonResult = CommonJson.camelObject(mOGroup_SendText); #region 消息分发 Clients.OthersInGroup(msg.To_GroupId.ToString()).Group_SendPicture(jsonResult); #endregion return(jsonResult); } else { return(null); } }
/// <summary> /// 会话-重置未读消息数 /// </summary> /// <returns></returns> public object Chatter_ResetUnreadMsg(IChatter_ResetUnreadMsg model) { var user = LOGIN_USER; IM_ChatterActor chatterActor = null; var db_result = 0; using (var db = new ModelAC()) { if (model.SessionType == IM_ChatType.Single) { var userB = db.IM_User.SingleOrDefault(p => p.App_Id == APP_GUID && p.UserId == model.ChatId); chatterActor = db.IM_ChatterActor .SingleOrDefault(p => p.App_Id == APP_GUID && p.IM_Chatter.ChatType == IM_ChatType.Single && p.UserId == user.Id && ((p.IM_Chatter.Single_A_UserId == user.Id && p.IM_Chatter.Single_B_UserId == userB.Id) || (p.IM_Chatter.Single_A_UserId == userB.Id && p.IM_Chatter.Single_B_UserId == user.Id))); chatterActor.UnreadMsgCount = 0; db_result = db.SaveChanges(); } else if (model.SessionType == IM_ChatType.Group) { var group = db.IM_Group.SingleOrDefault(p => p.App_Id == APP_GUID && p.GroupId == model.ChatId); chatterActor = db.IM_ChatterActor .SingleOrDefault(p => p.App_Id == APP_GUID && p.IM_Chatter.ChatType == IM_ChatType.Group && p.UserId == user.Id && p.IM_Chatter.Group_GroupId == group.Id); chatterActor.UnreadMsgCount = 0; db_result = db.SaveChanges(); } } if (db_result == 1) { var jsonResult = CommonJson.camelObject(new OChatter_ResetUnreadMsg { ChatId = model.ChatId, SessionId = chatterActor.ChatterId.ToString(), SessionType = model.SessionType, UnreadMsgCount = chatterActor.UnreadMsgCount }); return(jsonResult); } else { return(null); } }
/// <summary> /// 群主-创建群 /// </summary> public object GM_Create(IGM_Create model) { var mOGM_Create = new OGM_Create(); if (ImGroupExists(model.GroupId)) { mOGM_Create.Success = false; mOGM_Create.Msg = "已存在该群组编号"; return(CommonJson.camelObject(mOGM_Create)); } var user = LOGIN_USER; var group = new IM_Group(); var mIm_UserGroup = new Im_UserGroup(); var db_result = 0; using (var db = new ModelAC()) { #region db group.App_Id = APP_GUID; group.GroupId = model.GroupId; group.GroupName = model.GroupName; mIm_UserGroup.IM_User_Id = user.Id; mIm_UserGroup.IM_Group_Id = group.Id; mIm_UserGroup.GroupPosition = IM_GroupPosition.Founder; db.IM_Group.Add(group); db.Im_UserGroup.Add(mIm_UserGroup); db_result = db.SaveChanges(); #endregion } if (db_result > 0) { mOGM_Create.Success = true; mOGM_Create.Msg = "群聊创建成功!"; //将连接添加到指定的组 Groups.Add(Context.ConnectionId, group.Id.ToString()); return(CommonJson.camelObject(mOGM_Create)); } else { mOGM_Create.Success = false; mOGM_Create.Msg = "服务器错误!"; return(CommonJson.camelObject(mOGM_Create)); } }
/// <summary> /// 发送-图片消息 /// </summary> /// <returns></returns> public object Single_SendPicture(ISingle_SendText model) { var msg = new IM_MsgSingle(); var db_result = 0; using (var db = new ModelAC()) { #region db msg.App_Id = APP_GUID; msg.MsgClientId = model.MsgClientId; msg.From_UserId = db.IM_User.SingleOrDefault(p => p.App_Id == APP_GUID && p.UserId == model.From_UserId).Id; msg.To_UserId = db.IM_User.SingleOrDefault(p => p.App_Id == APP_GUID && p.UserId == model.To_UserId).Id; msg.MsgTime = DateTime.Now; msg.IsRead = false; msg.MsgType = model.MsgType; msg.MsgBody = model.MsgBody; db.IM_MsgSingle.Add(msg); db_result = db.SaveChanges(); #endregion } var session_result = Single_updateSession(msg); if (db_result == 1) { var mOSingle_SendText = new OSingle_SendText() { #region 输出 Id = msg.Id.ToString(), MsgClientId = msg.MsgClientId, From_UserId = model.From_UserId, To_UserId = model.To_UserId, MsgTime = msg.MsgTime, IsRead = msg.IsRead, MsgType = msg.MsgType, MsgBody = msg.MsgBody, #endregion }; var jsonResult = CommonJson.camelObject(mOSingle_SendText); #region 消息分发 string to__Account = HubKey.App__Account(app: APP, account: model.To_UserId); using (var db = new SignalR_MapUsersModel()) { var connections = db.Connections.Where(p => p.User_UserName == to__Account && p.Connected == true).ToList(); for (int i = 0; i < connections.Count(); i++) { Clients.Client(connections[i].ConnectionID).Single_SendPicture(jsonResult); } } #endregion return(jsonResult); } else { return(null); } }
/// <summary> /// 更新会话 /// 单聊 /// </summary> /// <param name="model"></param> /// <returns></returns> private bool Single_updateSession(IM_MsgSingle msg) { var user = LOGIN_USER; var db_result = 0; using (var db = new ModelAC()) { var session = db.IM_Chatter.SingleOrDefault(p => p.App_Id == APP_GUID && p.ChatType == IM_ChatType.Single && ((p.Single_A_UserId == msg.From_UserId && p.Single_B_UserId == msg.To_UserId) || (p.Single_A_UserId == msg.To_UserId && p.Single_B_UserId == msg.From_UserId)) ); if (session == null) { #region 新增会话 var newSession = new IM_Chatter() { App_Id = APP_GUID, ChatType = IM_ChatType.Single, Single_A_UserId = msg.From_UserId, Single_B_UserId = msg.To_UserId, Group_GroupId = null, }; newSession.IM_ChatterActors.Add(new IM_ChatterActor() {//消息发送者 App_Id = APP_GUID, ChatterId = newSession.Id, UserId = msg.From_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 0, ChatterTime = DateTime.Now, IsCleared = false, }); newSession.IM_ChatterActors.Add(new IM_ChatterActor() {//消息接收者 App_Id = APP_GUID, ChatterId = newSession.Id, UserId = msg.To_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 1, ChatterTime = DateTime.Now, IsCleared = false, }); db.IM_Chatter.Add(newSession); db_result = db.SaveChanges(); #endregion } else { #region 更新会话 foreach (var toActor in session.IM_ChatterActors) { toActor.Last_MsgId = msg.Id; if (toActor.UserId != user.Id) {//消息接收者 toActor.UnreadMsgCount += 1; } toActor.ChatterTime = DateTime.Now; } db_result = db.SaveChanges(); #endregion } } return(db_result > 0); }
/// <summary> /// 更新会话 /// 群聊 /// </summary> /// <param name="model"></param> /// <returns></returns> private bool Group_updateSession(IM_MsgGroup msg) { var user = LOGIN_USER; //所有群聊成员 var allMembers = new List <Guid>(); var db_result = 0; using (var db = new ModelAC()) { allMembers = db.Im_UserGroup.Where(p => p.IM_Group_Id == msg.To_GroupId).Select(p => p.IM_User_Id).ToList(); var session = db.IM_Chatter.SingleOrDefault(p => p.App_Id == APP_GUID && p.ChatType == IM_ChatType.Group && p.Group_GroupId == msg.To_GroupId); if (session == null) { #region 新增会话 var newSession = new IM_Chatter() { App_Id = APP_GUID, ChatType = IM_ChatType.Group, Single_A_UserId = null, Single_B_UserId = null, Group_GroupId = msg.To_GroupId, }; newSession.IM_ChatterActors.Add(new IM_ChatterActor() {//消息发送者 App_Id = APP_GUID, ChatterId = newSession.Id, UserId = msg.From_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 0, ChatterTime = DateTime.Now, IsCleared = false, }); allMembers.Remove(msg.From_UserId); foreach (var memeberId in allMembers) {//消息接收者 newSession.IM_ChatterActors.Add(new IM_ChatterActor() { App_Id = APP_GUID, ChatterId = newSession.Id, UserId = memeberId, Last_MsgId = msg.Id, UnreadMsgCount = 1, ChatterTime = DateTime.Now, IsCleared = false, }); } db.IM_Chatter.Add(newSession); db_result = db.SaveChanges(); #endregion } else { #region 更新会话 List <Guid> oldIM_ChatterActors = session.IM_ChatterActors.Select(p => p.UserId).ToList(); List <Guid> expectedList = allMembers.Except(oldIM_ChatterActors).ToList(); foreach (var toActor in session.IM_ChatterActors) {//更新会话参与者 toActor.Last_MsgId = msg.Id; if (toActor.UserId != user.Id) {//消息接收者 toActor.UnreadMsgCount += 1; } toActor.ChatterTime = DateTime.Now; } if (expectedList.Exists(p => p == msg.From_UserId)) {//新增会话参与者-消息发送者 expectedList.Remove(msg.From_UserId); session.IM_ChatterActors.Add(new IM_ChatterActor() { App_Id = APP_GUID, ChatterId = session.Id, UserId = msg.From_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 0, ChatterTime = DateTime.Now, IsCleared = false, }); } foreach (var memeberId in expectedList) {//新增会话参与者-消息接收者 session.IM_ChatterActors.Add(new IM_ChatterActor() { App_Id = APP_GUID, ChatterId = session.Id, UserId = memeberId, Last_MsgId = msg.Id, UnreadMsgCount = 1, ChatterTime = DateTime.Now, IsCleared = false, }); } db_result = db.SaveChanges(); #endregion } } return(db_result > 0); }