/// <summary>
        /// 获取-单聊记录(分页)
        /// </summary>
        public object His_SingleHistory(IHis_SingleHistory model)
        {
            var user = LOGIN_USER;
            List <OSingle_SendText> db_Result = new List <OSingle_SendText>();

            using (var db = new ModelAC())
            {
                var userB = db.IM_User.SingleOrDefault(p => p.App_Id == APP_GUID && p.UserId == model.ChatId);

                #region 数据查询
                if (model.MsgId == null)
                {//获取最新5条消息
                    db_Result = db.IM_MsgSingle
                                .Where(p => (p.From_UserId == user.Id && p.To_UserId == userB.Id) || (p.From_UserId == userB.Id && p.To_UserId == user.Id))
                                .OrderByDescending(p => p.SortId)
                                .Take(5)
                                .Select(p => new OSingle_SendText
                    {
                        #region 输出
                        Id          = p.Id.ToString(),
                        MsgClientId = p.MsgClientId,
                        From_UserId = p.From_UserId == user.Id ? user.UserId : userB.UserId,
                        To_UserId   = p.From_UserId == user.Id ? user.UserId : userB.UserId,
                        MsgTime     = p.MsgTime,
                        IsRead      = p.IsRead,
                        MsgType     = p.MsgType,
                        MsgBody     = p.MsgBody,
                        #endregion
                    })
                                .ToList();
                }
                else
                {//获取MsgId之前5条消息
                    var msg = db.IM_MsgSingle.SingleOrDefault(p => p.App_Id == APP_GUID && p.Id == model.MsgId);
                    db_Result = db.IM_MsgSingle
                                .Where(p => p.SortId < msg.SortId)
                                .Where(p => (p.From_UserId == user.Id && p.To_UserId == userB.Id) || (p.From_UserId == userB.Id && p.To_UserId == user.Id))
                                .OrderByDescending(p => p.SortId)
                                .Take(5)
                                .Select(p => new OSingle_SendText
                    {
                        #region 输出
                        Id          = p.Id.ToString(),
                        MsgClientId = p.MsgClientId,
                        From_UserId = p.From_UserId == user.Id ? user.UserId : userB.UserId,
                        To_UserId   = p.From_UserId == user.Id ? user.UserId : userB.UserId,
                        MsgTime     = p.MsgTime,
                        IsRead      = p.IsRead,
                        MsgType     = p.MsgType,
                        MsgBody     = p.MsgBody,
                        #endregion
                    })
                                .ToList();
                }
                #endregion
            }

            var jsonResult = CommonJson.camelObject(db_Result);
            return(jsonResult);
        }
示例#2
0
        private string StringifyJson (CommonJson jsonObject)
        {
            var type = jsonObject.GetType ();

            string dataKey;
            if (type == typeof (TimeEntryJson)) {
                dataKey = "time_entry";
            } else if (type == typeof (ProjectJson)) {
                dataKey = "project";
            } else if (type == typeof (ClientJson)) {
                dataKey = "client";
            } else if (type == typeof (TaskJson)) {
                dataKey = "task";
            } else if (type == typeof (WorkspaceJson)) {
                dataKey = "workspace";
            } else if (type == typeof (UserJson)) {
                dataKey = "user";
            } else if (type == typeof (TagJson)) {
                dataKey = "tag";
            } else if (type == typeof (WorkspaceUserJson)) {
                dataKey = "workspace_user";
            } else if (type == typeof (ProjectUserJson)) {
                dataKey = "project_user";
            } else {
                throw new ArgumentException (String.Format ("Don't know how to handle JSON object of type {0}.", type), "jsonObject");
            }

            var json = new JObject ();
            json.Add (dataKey, JObject.FromObject (jsonObject));
            return json.ToString (Formatting.None);
        }
示例#3
0
        public JsonResult List(CustomerListModel model)
        {
            int        rowSize    = 20;
            AjaxResult ajaxResult = null;


            var total     = db.Customers.Count();
            var customers = db.Customers.OrderBy(p => p.Name).Skip(model.page * rowSize).Take(rowSize).Select(p => new
            {
                Id      = p.Id,
                Address = p.Address,
                Name    = p.Name,
                Age     = p.Birthday == null ? -1 : (DateTime.Now.Year - p.Birthday.Value.Year),
                Date    = p.Birthday
            }).ToList();

            ajaxResult = new AjaxResult()
            {
                Success = true,
                Msg     = "加载数据成功",
                Body    = new
                {
                    Total     = total,
                    Customers = customers
                }
            };

            return(new JsonResult()
            {
                ContentEncoding = Encoding.UTF8, Data = CommonJson.camelJson(ajaxResult), JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }
        /// <summary>
        /// 获取群组详情
        /// </summary>
        /// <returns></returns>
        public object GM_GroupInfo(IGM_GroupInfo model)
        {
            var group      = new IM_Group();
            var resMembers = Get_GroupMembers(model.GroupId);

            return(CommonJson.camelObject(resMembers));
        }
示例#5
0
 protected static void ImportCommonJson(CommonData data, CommonJson json)
 {
     data.RemoteId       = json.Id;
     data.RemoteRejected = false;
     data.DeletedAt      = null;
     data.ModifiedAt     = json.ModifiedAt.ToUtc();
     data.IsDirty        = false;
 }
        /// <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);
            }
        }
示例#8
0
        public JsonResult Remove()
        {
            AjaxResult ajaxResult = null;

            return(new JsonResult()
            {
                ContentEncoding = Encoding.UTF8, Data = CommonJson.camelJson(ajaxResult)
            });
        }
        /// <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));
            }
        }
示例#10
0
        /// <summary>
        /// 获取-好友
        /// </summary>
        /// <returns></returns>
        public object FG_GetFriends()
        {
            List <OFG_GetFriends> resFriends = null;

            using (var db = new ModelAC())
            {
                var friends = db.IM_User.Where(p => p.App_Id == APP_GUID && p.UserId != ACCOUNT).OrderBy(p => p.Name);
                resFriends = friends.Select(p => new OFG_GetFriends
                {
                    Account = p.UserId,
                    Name    = p.Name,
                    Img     = SITE_URL + p.PortraitUri
                }).ToList();
            }

            return(CommonJson.camelObject(resFriends));
        }
        /// <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);
            }
        }
示例#12
0
        public static CommonData Import(this CommonJson json, IDataStoreContext ctx,
                                        Guid?localIdHint = null, CommonData mergeBase = null)
        {
            var type = json.GetType();

            if (type == typeof(ClientJson))
            {
                return(Import((ClientJson)json, ctx, localIdHint, (ClientData)mergeBase));
            }
            else if (type == typeof(ProjectJson))
            {
                return(Import((ProjectJson)json, ctx, localIdHint, (ProjectData)mergeBase));
            }
            else if (type == typeof(ProjectUserJson))
            {
                return(Import((ProjectUserJson)json, ctx, localIdHint, (ProjectUserData)mergeBase));
            }
            else if (type == typeof(TagJson))
            {
                return(Import((TagJson)json, ctx, localIdHint, (TagData)mergeBase));
            }
            else if (type == typeof(TaskJson))
            {
                return(Import((TaskJson)json, ctx, localIdHint, (TaskData)mergeBase));
            }
            else if (type == typeof(TimeEntryJson))
            {
                return(Import((TimeEntryJson)json, ctx, localIdHint, (TimeEntryData)mergeBase));
            }
            else if (type == typeof(UserJson))
            {
                return(Import((UserJson)json, ctx, localIdHint, (UserData)mergeBase));
            }
            else if (type == typeof(WorkspaceJson))
            {
                return(Import((WorkspaceJson)json, ctx, localIdHint, (WorkspaceData)mergeBase));
            }
            else if (type == typeof(WorkspaceUserJson))
            {
                return(Import((WorkspaceUserJson)json, ctx, localIdHint, (WorkspaceUserData)mergeBase));
            }
            throw new InvalidOperationException(String.Format("Unknown type of {0}", type));
        }
示例#13
0
        protected static bool ShouldOverwrite(CommonData data, CommonJson json)
        {
            if (data == null)
            {
                return(true);
            }

            if (!data.IsDirty || data.RemoteRejected)
            {
                return(true);
            }

            if (data.ModifiedAt.ToUtc() < json.ModifiedAt.ToUtc())
            {
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 通知→群组人员变更
        /// </summary>
        /// <param name="group"></param>
        private void Update_GM_AddUsers(IM_Group group)
        {//通知所有群组成员
            var resMembers    = Get_GroupMembers(group.GroupId);
            var app_accounts  = resMembers.Select(p => HubKey.App__Account(app: APP, account: p.Account)).ToList();
            var connectionIDs = Base_GetConnectionIds(app_accounts);

            foreach (var connectionId in connectionIDs)
            {
                var groupInfo = new OFG_GetGroups()
                {
                    Id            = group.Id.ToString(),
                    GroupId       = group.GroupId,
                    GroupName     = group.GroupName,
                    GroupPosition = IM_GroupPosition.Memeber,//管理员功能暂不实现
                    Members       = resMembers.ToArray <object>(),
                };
                //发送系统通知
                Clients.Client(connectionId).GM_AddUsers(CommonJson.camelObject(groupInfo));
            }
        }
示例#15
0
        public JsonResult Login(AccountLoginModel model)
        {
            if (!ModelState.IsValid)
            {
            }

            AjaxResult ajaxResult = null;

            var user = db.Users.SingleOrDefault(p => p.Account == model.Account && p.Password == model.Password);

            if (user != null)
            {
                SaveSession(user);
                ajaxResult = new AjaxResult()
                {
                    Success = true,
                    Msg     = "用户登录成功",
                    Body    = new
                    {
                        Id       = user.Id,
                        Account  = user.Account,
                        NickName = user.NickName,
                        Avatar   = user.Avatar,
                    }
                };
            }
            else
            {
                ajaxResult = new AjaxResult()
                {
                    Success = false,
                    Msg     = "用户名或密码错误",
                    Body    = null
                };
            }

            return(new JsonResult()
            {
                ContentEncoding = Encoding.UTF8, Data = CommonJson.camelJson(ajaxResult)
            });
        }
示例#16
0
        public JsonResult List(UserListModel model)
        {//动态排序属性名要大小全字匹配,eg:"NickName"
            int    page          = model.page;
            int    rowSize       = model.rowSize;
            bool   sortWay_order = model.sortWay_order;
            string sortWay_prop  = model.sortWay_prop.Substring(0, 1).ToUpper() + model.sortWay_prop.Substring(1);

            AjaxResult ajaxResult = null;

            var total = db.Users.Count();
            var users = CommonLinq.Sort(db.Users.Where(p => true), sortWay_prop, sortWay_order)
                        .Skip(page * rowSize).Take(rowSize)
                        .Select(p => new
            {
                Id         = p.Id,
                Account    = p.Account,
                NickName   = p.NickName,
                Password   = p.Password,
                Avatar     = p.Avatar,
                CreateTime = p.CreateTime
            }).ToList();

            ajaxResult = new AjaxResult()
            {
                Success = true,
                Msg     = "加载数据成功",
                Body    = new
                {
                    Total = total,
                    Users = users
                }
            };

            return(new JsonResult()
            {
                ContentEncoding = Encoding.UTF8, Data = CommonJson.camelJson(ajaxResult), JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }
示例#17
0
        /// <summary>
        /// 获取-群组
        /// </summary>
        /// <returns></returns>
        public object FG_GetGroups()
        {
            IList <OFG_GetGroups> resGroups = Base_GetGroups();

            return(CommonJson.camelObject(resGroups));
        }
        /// <summary>
        /// 获取-群聊记录(分页)
        /// </summary>
        public object His_GroupHistory(IHis_GroupHistory model)
        {
            var user = LOGIN_USER;
            List <OGroup_SendText> db_Result = new List <OGroup_SendText>();

            using (var db = new ModelAC())
            {
                var group = db.IM_Group.SingleOrDefault(p => p.App_Id == APP_GUID && p.GroupId == model.ChatId);

                #region 数据查询
                if (model.MsgId == null)
                {//获取最新5条消息
                    db_Result = db.IM_MsgGroup
                                .Where(p => p.To_GroupId == group.Id)
                                .OrderByDescending(p => p.SortId)
                                .Take(5)
                                .Select(p => new OGroup_SendText
                    {
                        #region 输出
                        Id          = p.Id.ToString(),
                        MsgClientId = p.MsgClientId,
                        From_UserId = p.From_IM_User.UserId,
                        //From_UserImg = SITE_URL + p.From_IM_User.PortraitUri,
                        To_GroupId = group.GroupId,
                        MsgTime    = p.MsgTime,
                        IsFullRead = p.IsFullRead,
                        MsgType    = p.MsgType,
                        MsgBody    = p.MsgBody,
                        #endregion
                    })
                                .ToList();
                }
                else
                {//获取MsgId之前5条消息
                    var msg = db.IM_MsgGroup.SingleOrDefault(p => p.App_Id == APP_GUID && p.Id == model.MsgId);
                    db_Result = db.IM_MsgGroup
                                .Where(p => p.SortId < msg.SortId)
                                .Where(p => p.To_GroupId == group.Id)
                                .OrderByDescending(p => p.SortId)
                                .Take(5)
                                .Select(p => new OGroup_SendText
                    {
                        #region 输出
                        Id          = p.Id.ToString(),
                        MsgClientId = p.MsgClientId,
                        From_UserId = p.From_IM_User.UserId,
                        //From_UserImg = SITE_URL + p.From_IM_User.PortraitUri,
                        To_GroupId = group.GroupId,
                        MsgTime    = p.MsgTime,
                        IsFullRead = p.IsFullRead,
                        MsgType    = p.MsgType,
                        MsgBody    = p.MsgBody,
                        #endregion
                    })
                                .ToList();
                }
                #endregion
            }

            var jsonResult = CommonJson.camelObject(db_Result);
            return(jsonResult);
        }
示例#19
0
        public async Task <IHttpActionResult> vSessionByUser(Guid APP_GUID, Guid userId)
        {
            List <OChatter_ChatterInfo> db_Result = new List <OChatter_ChatterInfo>();

            using (var db = new ModelAC())
            {
                List <OChatter_ChatterInfo> sessions = new List <OChatter_ChatterInfo>();
                #region 单聊会话
                var single = db.IM_ChatterActor
                             .Where(p => p.App_Id == APP_GUID && p.IM_Chatter.ChatType == IM_ChatType.Single && p.UserId == userId)
                             .Select(p => new OChatter_ChatterInfo
                {
                    ChatId         = p.IM_Chatter.Single_A_UserId == userId ? p.IM_Chatter.Single_B_IM_User.UserId : p.IM_Chatter.Single_A_IM_User.UserId,
                    ChatName       = p.IM_Chatter.Single_A_UserId == userId ? p.IM_Chatter.Single_B_IM_User.Name : p.IM_Chatter.Single_A_IM_User.Name,
                    ChatImg        = string.Empty + p.IM_User.PortraitUri,
                    SessionId      = p.ChatterId.ToString(),
                    SessionType    = p.IM_Chatter.ChatType,
                    UnreadMsgCount = p.UnreadMsgCount,
                    ChatterTime    = p.ChatterTime,
                    Messages       = new HashSet <object>()
                    {
                        db.IM_MsgSingle.Where(s => s.Id == p.Last_MsgId)
                        .Select(m => new OSingle_SendText {
                            Id          = m.Id.ToString(),
                            MsgClientId = m.MsgClientId,
                            From_UserId = m.From_IM_User.UserId,
                            To_UserId   = m.To_IM_User.UserId,
                            MsgTime     = m.MsgTime,
                            IsRead      = m.IsRead,
                            MsgType     = m.MsgType,
                            MsgBody     = m.MsgBody,
                        }).FirstOrDefault()
                    },
                });
                #endregion
                #region 群聊会话
                var group = db.IM_ChatterActor
                            .Where(p => p.App_Id == APP_GUID && p.IM_Chatter.ChatType == IM_ChatType.Group && p.UserId == userId)
                            .Select(p => new OChatter_ChatterInfo
                {
                    ChatId         = p.IM_Chatter.Group_IM_Group.GroupId,
                    ChatName       = p.IM_Chatter.Group_IM_Group.GroupName,
                    ChatImg        = null,
                    SessionId      = p.ChatterId.ToString(),
                    SessionType    = p.IM_Chatter.ChatType,
                    UnreadMsgCount = p.UnreadMsgCount,
                    ChatterTime    = p.ChatterTime,
                    Messages       = new HashSet <object>()
                    {
                        db.IM_MsgSingle.Where(s => s.Id == p.Last_MsgId)
                        .Select(m => new OSingle_SendText {
                            Id          = m.Id.ToString(),
                            MsgClientId = m.MsgClientId,
                            From_UserId = m.From_IM_User.UserId,
                            To_UserId   = m.To_IM_User.UserId,
                            MsgTime     = m.MsgTime,
                            IsRead      = m.IsRead,
                            MsgType     = m.MsgType,
                            MsgBody     = m.MsgBody,
                        }).FirstOrDefault()
                    },
                });
                #endregion
                sessions.AddRange(single);
                sessions.AddRange(group);
                db_Result = sessions.OrderByDescending(p => p.ChatterTime).ToList();
            }
            var jsonResult = CommonJson.camelObject(db_Result);
            return(Ok(jsonResult));
        }
        /// <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);
            }
        }