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

            /*
             *          {
             *              "execFun": "sendMsg",
             *              "data": {
             *                  "dialogId": "788FEFAD0ED24436AD73D968685110E8",
             *                  "textMsg": "test message for one user",
             *                  "guidMsg": "91D8333FA55B40AFB46CA63E214C93C8",
             *                  "curFrg":"1",
             *                  "totalFrg":"2",
             *                  "transactionId": "80f7efc032dd4a1c97f69fca51ad1100",
             *                  "deathDate": "2511450497620"
             *              }
             *          }
             */
            #endregion

            OutputSocketMessage          output      = new OutputSocketMessage("sendMsg", actId, true, "", new { });
            OutputSocketMessage          outputOther = new OutputSocketMessage("sendMsg", Guid.Empty, true, "", new { });
            OutputSocketMessageWithUsers rez         = new OutputSocketMessageWithUsers();

            InputMsgInfo info = DeserializeObject.ParseJSON <InputMsgInfo>(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.Groups.Any(it => it.group_id == info.dialogId && it.MemberInGroup.Any(mg => mg.group == it && mg.member == owner))) //Check created group and member in this group
                {
                    if (!db.Shares.Any(it => it.id == info.msgId))                                                                         //Check exist message with Id
                    {
                        Groups gr = db.Groups.Include(s => s.Shares).First(it => it.group_id == info.dialogId);
                        Console.WriteLine(SystemClock.GetInstance().CurrentTime.ToString());
                        Shares msg = new Shares
                        {
                            id               = info.msgId,
                            owner            = owner,
                            current_fragment = info.curFrg,
                            total_fragment   = info.totalFrg,
                            file_data        = Encoding.Unicode.GetBytes(info.textMsg),
                            file_extention   = "none",
                            kb_size          = 0,
                            sending_date     = SystemClock.GetInstance().CurrentTime, // DateTimeOffset.Now.ToUnixTimeSeconds(),
                            death_date       =
                                info.deathDate > 0
                                    ? DateConvert.validateTimestamp(SystemClock.GetInstance().CurrentTime + info.deathDate)
                                    : DateTimeOffset.Now.AddYears(2000).ToUnixTimeSeconds(),
                            to_group = gr
                        };
                        gr.Shares.Add(msg);
                        db.Shares.Add(msg);

                        Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.SHARES,
                                                    msg.id.ToString(), owner);

                        db.SaveChanges();

                        List <MemberInGroup> membersInGroup = db.MemberInGroup.Include(m => m.member)
                                                              .Where(it => it.group == gr && it.member != owner).ToList();
                        membersInGroup.ForEach(it => rez.forUserLogin.Add(it.member.login));

                        string groupNameForOwner = gr.group_name_part,
                               groupNameForOther = gr.group_name_part;

                        if (gr.one_to_one)
                        {
                            groupNameForOwner = membersInGroup.First(it => it.member != owner).member.nick_name;
                            groupNameForOther = owner.nick_name;
                        }

                        OneMessageInfo newMsg = new OneMessageInfo(msg.id, info.textMsg, msg.current_fragment,
                                                                   msg.total_fragment, msg.sending_date, owner.nick_name, msg.owner.login);

                        output.data = new OutGetMsgInfo(gr.group_id, groupNameForOwner, gr.one_to_one, gr.privated,
                                                        new List <OneMessageInfo>()
                        {
                            newMsg
                        });
                        outputOther.data = new OutGetMsgInfo(gr.group_id, groupNameForOther, gr.one_to_one, gr.privated,
                                                             new List <OneMessageInfo>()
                        {
                            newMsg
                        });

                        Transaction.removeMessageAboveLimit(gr);
                    }
                    else
                    {
                        output.success  = false;
                        output.msgError = "Message with this ID is exist";
                        output.data     = new { id = info.msgId };
                        rez.msgForOwner = output;
                        return(rez);
                    }
                }
                else
                {
                    output.success  = false;
                    output.msgError = "Dialog is not found";
                    rez.msgForOwner = output;
                    return(rez);
                }
            }

            rez.msgForOwner = output;
            rez.msgForOther = outputOther;
            return(rez);
        }
Exemple #2
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);
        }