Example #1
0
        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            #region Тестовые данные

            /* {
             *      "execFun": "GetDialogs",
             *      "data": {
             *          "msgCount": "2"
             *      }
             *  }
             */
            #endregion

            OutputSocketMessage          output = new OutputSocketMessage("getMsg", actId, true, "", new { });
            OutputSocketMessageWithUsers rez    = new OutputSocketMessageWithUsers();

            GetDialogsInfo info = DeserializeObject.ParseJSON <GetDialogsInfo>(val, output, out rez);
            if (info == null)
            {
                return(rez);
            }

            using (var db = new RaidaContext())
            {
                Members owner = db.Members.First(it => it.login.Equals(myLogin));

                // ReSharper disable once SuggestVarOrType_Elsewhere
                List <OutGetMsgInfo> list = new List <OutGetMsgInfo>();
                //I'am consist in this dialogs
                List <MemberInGroup> mg = db.MemberInGroup.Include(g => g.group)
                                          .ThenInclude(s => s.Shares).ThenInclude(own => own.owner)
                                          .Where(it => it.member.login.Equals(myLogin))
                                          .ToList();

                mg.ForEach(it => {
                    string groupName = it.group.group_name_part;
                    if (it.group.one_to_one)
                    {
                        groupName = db.MemberInGroup.Include(m => m.member).FirstOrDefault(mig => mig.group == it.group && mig.member != owner)?.member.nick_name;
                    }
                    OutGetMsgInfo group = new OutGetMsgInfo(it.group.group_id, groupName, it.group.one_to_one, it.group.privated);
                    //Add all message in dialog
                    it.group.Shares.OrderBy(s => s.sending_date)
                    .Take(info.msgCount)
                    .ToList()
                    .ForEach(msg => group.messages.Add(new OneMessageInfo(msg.id, Encoding.Unicode.GetString(msg.file_data), msg.current_fragment, msg.total_fragment, msg.sending_date, msg.owner.nick_name, msg.owner.login)));

                    //Add users where consist in dialog
                    db.MemberInGroup.Include(m => m.member).Where(mig => mig.groupId.Equals(it.groupId))
                    .ForEachAsync(memb => group.members.Add(memb.member.login));

                    list.Add(group);
                });

                output.data = list;
            }

            rez.msgForOwner = output;
            return(rez);
        }
Example #2
0
        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            #region Тестовые данные

            /* {
             *      "execFun": "GetMsg",
             *      "data": {
             *          "dialogId": "788FEFAD0ED24436AD73D968685110E8",
             *          "msgCount": "2",
             *          "offset": "0"
             *      }
             *  }
             */
            #endregion

            OutputSocketMessage          output = new OutputSocketMessage("getMsg", actId, true, "", new { });
            OutputSocketMessageWithUsers rez    = new OutputSocketMessageWithUsers();

            GetMsgInfo info = DeserializeObject.ParseJSON <GetMsgInfo>(val, output, out rez);
            if (info == null)
            {
                return(rez);
            }

            using (var db = new RaidaContext())
            {
                Members owner = db.Members.First(it => it.login.Equals(myLogin));

                if (db.MemberInGroup.Include(g => g.group).Any(it => it.member.login.Equals(myLogin) && it.groupId == info.dialogId))
                {
                    MemberInGroup mg = db.MemberInGroup.Include(g => g.group).ThenInclude(s => s.Shares).Where(it => it.member.login.Equals(myLogin) && it.groupId == info.dialogId).First();

                    string groupName = mg.group.group_name_part;
                    if (mg.group.one_to_one)
                    {
                        groupName = db.MemberInGroup.Include(m => m.member).FirstOrDefault(mig => mig.group == mg.group && mig.member != owner)?.member.nick_name;
                    }
                    OutGetMsgInfo groupMsg = new OutGetMsgInfo(mg.group.group_id, groupName, mg.group.one_to_one, mg.group.privated);
                    mg.group.Shares.Where(it => it.death_date > SystemClock.GetInstance().CurrentTime)
                    .OrderBy(s => s.sending_date)
                    .Skip(info.offset)
                    .Take(info.msgCount)
                    .ToList()
                    .ForEach(msg => groupMsg.messages.Add(new OneMessageInfo(msg.id, Encoding.Unicode.GetString(msg.file_data), msg.current_fragment, msg.total_fragment, msg.sending_date, msg.owner.nick_name, msg.owner.login)));

                    output.data = groupMsg;
                }
                else
                {
                    output.success  = false;
                    output.msgError = "Dialog is not found";
                }
            }

            rez.msgForOwner = output;
            return(rez);
        }
Example #3
0
        private OutputSocketMessageWithUsers sendmsg(Object val, Guid myPublicLogin)
        {
            #region Тестовые данные

            /*
             *          {
             *              "execFun": "sendMsg",
             *              "data": {
             *                  "recipientId": "788FEFAD0ED24436AD73D968685110E8",
             *                  "recipientLogin": "******",
             *                  "toGroup": "false",
             *                  "textMsg": "test message for one user",
             *                  "guidMsg": "91D8333FA55B40AFB46CA63E214C93C8",
             *                  "sendTime": "1511450497620",
             *                  "curFrg":"1",
             *                  "totalFrg":"2"
             *              }
             *          }
             *
             *          {
             *              "execFun": "sendMsg",
             *              "data": {
             *                  "recipientId": "48A0CA0657DE4FB09CDC86008B2A8EBE",
             *                  "toGroup": "true",
             *                  "textMsg": "test message for group",
             *                  "guidMsg": "CA5BBD6B488941FEACFA19692D3087E0",
             *                  "sendTime": "1511450497620",
             *                  "curFrg":"1",
             *                  "totalFrg":"2"
             *              }
             *          }
             *          {
             *              "execFun": "sendMsg",
             *              "data": {
             *                  "recipientId": "80f7efc032dd4a7c97f69fca51ad3000",
             *                  "toGroup": "false",
             *                  "textMsg": "response fo test message",
             *                  "guidMsg": "19D2B66BB477467ABAE72AC79F5A2C48",
             *                  "sendTime": "1511450497620",
             *                  "curFrg":"1",
             *                  "totalFrg":"2"
             *              }
             *          }
             *          {
             *              "execFun": "sendMsg",
             *              "data": {
             *                  "recipientId": "48A0CA0657DE4FB09CDC86008B2A8EBE",
             *                  "toGroup": "true",
             *                  "textMsg": "response for group test message",
             *                  "guidMsg": "3D45AF8702CA4857A03D7EBD90D95C89",
             *                  "sendTime": "1511450497620",
             *                  "curFrg":"1",
             *                  "totalFrg":"2"
             *              }
             *          }
             */
            #endregion

            OutputSocketMessage          output = new OutputSocketMessage("sendMsg", true, "", new { });
            OutputSocketMessageWithUsers rez    = new OutputSocketMessageWithUsers();

            OutGetMsgInfo outputForOther = null;

            InputMsgInfo info = DeserObj <InputMsgInfo>(val, output, out rez);
            if (info == null)
            {
                return(rez);
            }

            using (var db = new CloudChatEntities())
            {
                Guid recepId = info.recipientId;
                if (info.toGroup)
                {
                    if (!db.groups.Any(it => it.group_id == info.recipientId))
                    {
                        output.success  = false;
                        output.msgError = "Group is not found";
                        rez.msgForOwner = output;
                        return(rez);
                    }
                }
                else
                {
                    if (!db.members.Any(it => it.public_id == info.recipientId || it.login.Equals(info.recipientLogin.Trim(), StringComparison.CurrentCultureIgnoreCase)))
                    {
                        output.success  = false;
                        output.msgError = "User is not found";
                        rez.msgForOwner = output;
                        return(rez);
                    }
                    recepId = db.members.FirstOrDefault(it => it.public_id == info.recipientId || it.login.Equals(info.recipientLogin.Trim(), StringComparison.CurrentCultureIgnoreCase)).public_id;
                }

                if (output.success)
                {
                    content_over_8000 msg = new content_over_8000();
                    msg.shar_id   = info.msgId;
                    msg.file_data = Encoding.Unicode.GetBytes(info.textMsg);
                    db.content_over_8000.Add(msg);

                    shares newShare = new shares();
                    newShare.id                = info.msgId;
                    newShare.owner_private     = db.usp_membersSelect(myPublicLogin).First().private_id;
                    newShare.to_public         = recepId;
                    newShare.self_one_or_group = info.toGroup.ToString();
                    newShare.content           = msg;
                    newShare.current_fragment  = info.curFrg;
                    newShare.total_fragment    = info.totalFrg;
                    newShare.sending_date      = info.sendTime;

                    newShare.file_extention = "none";

                    db.shares.Add(newShare);

                    db.SaveChanges();

                    string groupName = "";

                    if (info.toGroup)
                    {
                        groupName = db.groups.Where(it => it.group_id == recepId).FirstOrDefault().group_name_part;
                    }
                    else
                    {
                        groupName = db.members.FirstOrDefault(it => it.public_id == recepId).login;
                    }

                    string login = db.members.FirstOrDefault(it => it.private_id == newShare.owner_private).login;
                    outputForOther = new OutGetMsgInfo(info.msgId, info.textMsg, myPublicLogin, info.toGroup.ToString(), recepId, info.sendTime, info.curFrg, info.totalFrg, login, groupName);

                    if (info.toGroup)
                    {
                        db.group_members.Where(it => it.group_id == recepId && it.member_id != newShare.owner_private)
                        .ToList()
                        .ForEach(it => rez.usersId.Add(
                                     db.members.First(m => m.private_id == it.member_id).public_id
                                     )
                                 );
                    }
                    else
                    {
                        //rez.usersId.Add(info.login);
                        rez.usersId.Add(recepId);
                    }
                }
            }
            output.data     = outputForOther;
            rez.msgForOwner = output;
            rez.msgForOther = output;
            // rez.msgForOther = new { callFunction="newMessage", data = outputForOther } ;
            return(rez);
        }