示例#1
0
        public T GetObject <T>()
        {
            if (ContentType == RiakConstants.ContentTypes.ApplicationJson)
            {
                var deserializeObject = new DeserializeObject <T>((value, contentType) => JsonConvert.DeserializeObject <T>(Value.FromRiakString()));
                return(GetObject(deserializeObject));
            }

            if (ContentType == RiakConstants.ContentTypes.ProtocolBuffers)
            {
                var deserializeObject = new DeserializeObject <T>((value, contentType) =>
                {
                    var ms = new MemoryStream();
                    ms.Write(value, 0, Value.Length);
                    return(Serializer.Deserialize <T>(ms));
                });
                return(GetObject(deserializeObject));
            }

            if (ContentType == RiakConstants.ContentTypes.Xml)
            {
                var deserializeObject = new DeserializeObject <T>((value, contenType) =>
                {
                    var r     = XmlReader.Create(Value.FromRiakString());
                    var serde = new XmlSerializer(typeof(T));
                    return((T)serde.Deserialize(r));
                }
                                                                  );
                return(GetObject(deserializeObject));
            }

            throw new NotSupportedException(string.Format("Your current ContentType ({0}), is not supported.", ContentType));
        }
示例#2
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);
        }
        /// <summary>
        /// Deserialize the <see cref="Values"/> collection into a
        /// </summary>
        /// <typeparam name="T">The set members target type.</typeparam>
        /// <param name="deserializeObject">
        /// A delegate to handle deserialization of an byte[] serialized object to it's original type.
        /// </param>
        /// <returns>
        /// A newly initialized <see cref="ISet{T}"/> collection,
        /// populated with the deserialized objects from <see cref="Values"/>.
        /// </returns>
        /// <exception cref="ArgumentException">The <paramref name="deserializeObject"/> parameter must not be null.</exception>
        public ISet <T> GetObjects <T>(DeserializeObject <T> deserializeObject)
        {
            if (deserializeObject == null)
            {
                throw new ArgumentException("The deserializeObject delegate parameter must not be null.");
            }

            return(new HashSet <T>(Values.Select(v => deserializeObject(v))));
        }
示例#4
0
        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            #region Тестовые данные

            /* {
             *      "execFun": "OrganizationAddMember",
             *      "data": {
             *          "login": "******",
             *          "password": "******",
             *          "nickName": "Serj",
             *          "transactionId": "80f7efc032cd4a2c97f89fca11ad3701"
             *      }
             *  }
             */
            #endregion

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

            using (var db = new RaidaContext())
            {
                Members owner = db.Members.Include(o => o.organization).First(it => it.login.Equals(myLogin));
                if (owner.organization != null && owner.organization.owner == owner)
                {
                    Registration registration = new Registration();
                    rez = registration.Execute(val, myLogin, actId);
                    rez.msgForOwner.callFunction = "OrganizationAddMember";
                    if (rez.msgForOwner.success)
                    {
                        try
                        {
                            RegistrationInfo info         = DeserializeObject.ParseJSON <RegistrationInfo>(val, output, out rez);
                            Organizations    organization = db.Organizations.Include(m => m.members).First(it => it == owner.organization);
                            Members          newMember    = db.Members.First(it => it.login.Equals(info.login.Trim(), StringComparison.CurrentCultureIgnoreCase));
                            newMember.organization = organization;
                            organization.members.Add(newMember);

                            db.SaveChanges();
                            output.data     = new { newMember.login, nickName = newMember.nick_name };
                            rez.msgForOwner = output;
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                }
                else
                {
                    output.success  = false;
                    output.msgError = "You a not consist in organization or a not organization owner";
                    rez.msgForOwner = output;
                }
            }

            return(rez);
        }
示例#5
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);
        }
        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            #region Тестовые данные

            /*
             * {
             *  "execFun": "rollbacktransaction",
             *  "data": {
             *      "transactionId": "80f7efc032dd4a7c97f69fca51ad3001"
             *  }
             * }
             */
            #endregion

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

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

            output.data = new { transactionId = transId };
            //long dateNow = DateTimeOffset.Now.ToUnixTimeSeconds();
            long dateNow = SystemClock.GetInstance().CurrentTime;

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

                if (!db.Transactions.Any(it => it.transactionId == transId))
                {
                    output.success  = false;
                    output.msgError = "This transaction is not found";
                }
                else if (!(db.Transactions.Any(it => it.transactionId == transId && it.owner == owner)))
                {
                    output.success  = false;
                    output.msgError = "You not owner for this transaction";
                }
                else if (!(db.Transactions.Any(it => it.transactionId == transId && it.owner == owner && it.rollbackTime > dateNow)))
                {
                    output.success  = false;
                    output.msgError = "This transaction is blocked";
                }
                else
                {
                    Transaction.rollbackTransaction(transId, owner);
                }
            }

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

            /*
             * {
             *  "execFun": "SetDialogPrivate",
             *  "data": {
             *      "publicId": "18A0CA0657DE4FB09CDC86008B2A8EBE",
             *      "privated": "false"
             *  }
             * }
             */
            #endregion

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

            SetDialogPrivateInfo info = DeserializeObject.ParseJSON <SetDialogPrivateInfo>(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.publicId && it.owner == owner))
                {
                    Groups group = db.Groups.First(it => it.group_id == info.publicId && it.owner == owner);
                    group.privated = info.privated;
                    db.SaveChanges();
                    output.data = new { dialogId = group.group_id, group.privated };

                    List <MemberInGroup> membersInGroup = db.MemberInGroup.Include(m => m.member).Where(it => it.group == group && it.member != owner).ToList();
                    membersInGroup.ForEach(it => rez.forUserLogin.Add(it.member.login));
                    rez.msgForOther = output;
                }
                else
                {
                    output.success  = false;
                    output.msgError = "This dialog not found or you not owner";
                    rez.msgForOwner = output;
                    return(rez);
                }
            }


            rez.msgForOwner = output;
            return(rez);
        }
示例#8
0
        /* { "execFun": "registration",
         *      "data": {
         *          "login": "******",
         *          "password": "******",
         *          "nickName": "gosha",
         *          "transactionId": "80f7efc032dd4a7c97f69fca51ad3001"
         *      }
         *  }
         */

        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            OutputSocketMessage          output = new OutputSocketMessage("registration", actId, true, "", new { });
            OutputSocketMessageWithUsers rez    = new OutputSocketMessageWithUsers();


            RegistrationInfo info = DeserializeObject.ParseJSON <RegistrationInfo>(val, output, out rez);

            if (info == null)
            {
                return(rez);
            }

            using (var db = new RaidaContext())
            {
                if (db.Members.Any(it => it.login.Equals(info.login.Trim(), StringComparison.CurrentCultureIgnoreCase)))
                {
                    output.success  = false;
                    output.msgError = "This login already exists";
                }
                else
                {
                    Guid privateId = Guid.NewGuid();
                    while (db.Members.Any(it => it.private_id == privateId))
                    {
                        privateId = Guid.NewGuid();
                    }

                    info.password = Argon2.Hash(info.password, 1, 512, 8); //Hashing password
                    Members member = new Members
                    {
                        private_id           = privateId,
                        login                = info.login.Trim().ToLower(),
                        pass                 = info.password,
                        nick_name            = info.nickName,
                        last_use             = SystemClock.GetInstance().CurrentTime,
                        description_fragment = "",
                        photo_fragment       = "",
                        kb_bandwidth_used    = 0,
                        online               = false,
                    };
                    db.Members.Add(member);
                    Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS, privateId.ToString(), member);

                    db.SaveChanges();
                }
            }

            rez.msgForOwner = output;
            return(rez);
        }
示例#9
0
        /// <summary>
        /// Send all users info about changed my info
        /// </summary>
        /// <param name="db"></param>
        /// <param name="user"></param>
        private void SendMessageOfChangeUser(RaidaContext db, Members user)
        {
            var response = new
            {
                callFunction = "changeUserInfo",
                data         = new { itself = false, user = new UserInfo(user.login, user.nick_name, user.photo_fragment, user.online) }
            };
            List <string> users = DeserializeObject.GetMyReferenceUser(db, user);

            mClients.Where(it => users.Contains(it.login)).ToList().ForEach(it =>
            {
                SendMessage(it.client, response);
            });
        }
示例#10
0
        /// <summary>
        /// Deserializes and returns the object's value, using the provided deserializer.
        /// </summary>
        /// <typeparam name="T">The value's target type.</typeparam>
        /// <param name="deserializeObject">A delegate to handle deserialization of an byte[] serialized object to it's original type.</param>
        /// <param name="resolveConflict">
        /// A delegate to handle resolution of sibling objects.
        /// Takes all the sibling objects as input and returns one "resolved" object.
        /// </param>
        /// <returns>The deserialized value.</returns>
        public T GetObject <T>(DeserializeObject <T> deserializeObject, ResolveConflict <T> resolveConflict = null)
        {
            if (deserializeObject == null)
            {
                throw new ArgumentException("deserializeObject must not be null");
            }

            if (Siblings.Count > 1 && resolveConflict != null)
            {
                var conflictedObjects = Siblings.Select(s => deserializeObject(s.Value, ContentType)).ToList();

                return(resolveConflict(conflictedObjects));
            }

            return(deserializeObject(Value, ContentType));
        }
示例#11
0
        public static void ConfigureEndpoints(this KestrelServerOptions options)
        {
            if (MainConfig.Connection.SSL != null)
            {
                try
                {
                    DeserializeObject.IsValid(MainConfig.Connection.SSL);
                }
                catch (Exception ex)
                {
                    LoadConfiguration.CloseApp(ex.Message);
                }

                var environment = options.ApplicationServices.GetRequiredService <IHostingEnvironment>();

                options.Listen(IPAddress.Parse(MainConfig.Connection.SSL.IP), MainConfig.Connection.Port,
                               listenOptions =>
                {
                    var certificate = LoadCertificate(environment);
                    listenOptions.UseHttps(certificate);
                });
            }
        }
示例#12
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);
        }
示例#13
0
        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            #region Тестовые данные

            /* {
             *      "execFun": "ChangeUserInfo",
             *      "data": {
             *          "name":"String",
             *                                  "photo":"String",
             *                                  "about":"String",
             *                                  "changePass":"******",
             *                                  "oldPass":"******",
             *                                  "newPass":"******"
             *      }
             *  }
             */
            #endregion

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

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

            using (var db = new RaidaContext())
            {
                Members owner = db.Members.Include(m => m.MemberInGroup).FirstOrDefault(it => it.login.Equals(myLogin));

                owner.nick_name            = info.Name;
                owner.photo_fragment       = info.Photo;
                owner.description_fragment = info.About;
                if (info.ChangePass)
                {
                    if (Argon2.Verify(owner.pass, info.OldPass, null))
                    {
                        if (info.NewPass.Trim().Length > 5)
                        {
                            owner.pass = Argon2.Hash(info.NewPass, 1, 512, 8);
                        }
                        else
                        {
                            output.success  = false;
                            output.msgError = "Minimum length of password is 6 chars";
                        }
                    }
                    else
                    {
                        output.success  = false;
                        output.msgError = "Current password is not valid";
                    }
                }

                db.SaveChanges();

                var user = new UserInfo(owner.login, owner.nick_name, owner.photo_fragment, owner.online);

                output.data = new
                {
                    itself = true,
                    user
                };

                outputForOther.data = new
                {
                    itself = false,
                    user
                };

                rez.forUserLogin = DeserializeObject.GetMyReferenceUser(db, owner);
            }

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

            /*
             *          {
             *              "execFun": "addMemberInGroup",
             *              "data": {
             *                  "memberLogin": "******",
             *                  "groupId": "48A0CA0657DE4FB09CDC86008B2A8EBE",
             *                   "transactionId": "80f7efc032dd4a7c97f69fca51ad1100"
             *              }
             *          }
             */
            #endregion

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

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

            using (var db = new RaidaContext())
            {
                if (db.Members.Any(it => it.login.Equals(info.memberLogin.Trim(), StringComparison.CurrentCultureIgnoreCase)))
                {
                    Members owner = db.Members.First(it => it.login.Equals(myLogin));
                    if (db.MemberInGroup.Any(it => it.member == owner && it.groupId == info.groupId && !it.group.one_to_one))
                    {
                        Members user = db.Members.FirstOrDefault(it => it.login.Equals(info.memberLogin.Trim(), StringComparison.CurrentCultureIgnoreCase));
                        if (db.MemberInGroup.Any(it => it.groupId == info.groupId && it.member == user))
                        {
                            output.success  = false;
                            output.msgError = "This user already exists in this group";
                        }
                        else
                        {
                            Groups group = db.Groups.First(it => it.group_id == info.groupId);

                            if (group.privated)
                            {
                                output.success  = false;
                                output.msgError = "This group is private";
                                rez.msgForOwner = output;
                                return(rez);
                            }

                            int newId = 0;
                            if (db.MemberInGroup.Any())
                            {
                                newId = db.MemberInGroup.OrderByDescending(it => it.Id).FirstOrDefault().Id + 1;
                            }

                            MemberInGroup mg = new MemberInGroup
                            {
                                Id     = newId,
                                group  = group,
                                member = user
                            };
                            db.MemberInGroup.Add(mg);

                            Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS_IN_GROUP, mg.Id.ToString(), owner);

                            db.SaveChanges();

                            output.data = new { itself = true, newUser = new UserInfo(user.login, user.nick_name, user.photo_fragment, user.online), groupId = group.group_id };

                            var members = db.MemberInGroup.Include(ming => ming.member)
                                          .Where(it => it.groupId.Equals(group.group_id)).Select(x => x.member.login).ToList(); //Logins of all users in dialog
                            rez.forUserLogin = members.Where(it => !it.Equals(myLogin)).ToList();                               //Send all users in dialog, but not me

                            rez.msgForOther = new
                            {
                                callFunction = "AddMemberInGroup",
                                data         = new {
                                    id       = info.groupId,
                                    name     = group.group_name_part,
                                    oneToOne = group.one_to_one,
                                    members  = members,
                                    newUser  = new UserInfo(user.login, user.nick_name, user.photo_fragment, user.online)
                                }
                            };
                        }
                    }
                    else
                    {
                        output.success  = false;
                        output.msgError = "Group is not found";
                    }
                }
                else
                {
                    output.success  = false;
                    output.msgError = "User is not found";
                }
            }

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

            /*
             * {
             *  "execFun": "createDialog",
             *  "data": {
             *      "name": "MeCloseGroup",
             *      "publicId": "48A0CA0657DE4FB09CDC86008B2A8EBE",
             *      "oneToOne": "false",
             *      "transactionId": "80f7efc032dd4a7c97f69fca51ad3100"
             *  }
             * }
             */
            #endregion

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

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

            using (var db = new RaidaContext())
            {
                if (db.Groups.Any(it => it.group_id == info.publicId))
                {
                    output.success  = false;
                    output.msgError = "Change the publicId";
                    rez.msgForOwner = output;
                    return(rez);
                }

                Members owner = db.Members.First(it => it.login.Equals(myLogin));

                Groups group = new Groups
                {
                    group_id        = info.publicId,
                    group_name_part = info.name,
                    owner           = owner,
                    photo_fragment  = "",
                    one_to_one      = info.oneToOne,
                    privated        = false
                };

                int newId = 1;
                if (db.MemberInGroup.Count() > 0)
                {
                    newId = db.MemberInGroup.OrderByDescending(it => it.Id).FirstOrDefault().Id + 1;
                }


                if (info.oneToOne)
                {
                    if (db.Members.Any(it => it.login.Equals(info.name.Trim().ToLower())))
                    {
                        group.group_name_part = "OneToOne";
                        Members rec = db.Members.First(it => it.login.Equals(info.name.Trim().ToLower()));

                        if (!db.MemberInGroup.Any(it => it.member == owner && db.MemberInGroup.Any(mg => mg.member == rec && it.group == mg.group && mg.group.one_to_one)))
                        {
                            MemberInGroup mg1 = new MemberInGroup
                            {
                                Id     = newId,
                                group  = group,
                                member = rec
                            };
                            db.MemberInGroup.Add(mg1);

                            Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS_IN_GROUP, mg1.Id.ToString(), owner);

                            newId++;
                            //rez.usersId.Add(info.login); Придумать ответ пользователю, которого добавили - а может он и не нужен
                        }
                        else
                        {
                            output.success  = false;
                            output.msgError = "This dialog exists";
                            rez.msgForOwner = output;
                            return(rez);
                        }
                    }
                    else
                    {
                        output.success  = false;
                        output.msgError = "User is not found";
                        rez.msgForOwner = output;
                        return(rez);
                    }
                }
                db.Groups.Add(group);
                MemberInGroup OwnerInMg = new MemberInGroup
                {
                    Id     = newId,
                    group  = group,
                    member = owner
                };
                db.MemberInGroup.Add(OwnerInMg);
                try {
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.GROUPS, info.publicId.ToString(), owner);
                Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS_IN_GROUP, OwnerInMg.Id.ToString(), owner);
            }
            output.data     = new { id = info.publicId, info.name, info.oneToOne };
            rez.msgForOwner = output;
            return(rez);
        }
示例#16
0
        public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId)
        {
            #region Тестовые данные

            /*
             *          {
             *              "execFun": "OrganizationCreate",
             *              "data": {
             *                  "publicId": "788FEFAD0ED24436AD73D968685110E8",
             *                  "name": "Organization Only One",
             *                  "transactionId": "80f7efc092da4a1c47f69fca51ad1100"
             *              }
             *          }
             */
            #endregion

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

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

            using (var db = new RaidaContext())
            {
                Members owner = db.Members.Include(o => o.organization).First(it => it.login.Equals(myLogin));
                if (owner.organization == null)
                {
                    if (!db.Organizations.Any(it => it.public_id == info.publicId))
                    {
                        Guid privateId = Guid.NewGuid();
                        while (db.Organizations.Any(it => it.private_id == privateId))
                        {
                            privateId = Guid.NewGuid();
                        }

                        Organizations newOrganiz = new Organizations
                        {
                            private_id    = privateId,
                            public_id     = info.publicId,
                            org_name_part = info.name,
                            kb_of_credit  = 0,
                            owner         = owner
                        };
                        newOrganiz.members.Add(owner);
                        db.Organizations.Add(newOrganiz);
                        Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.ORGANIZATIONS, newOrganiz.private_id.ToString(), owner);
                        db.SaveChanges();
                        output.data = new { publicId = newOrganiz.public_id, name = newOrganiz.org_name_part };
                    }
                    else
                    {
                        output.success  = false;
                        output.msgError = "Change the publicId";
                    }
                }
                else
                {
                    output.success  = false;
                    output.msgError = "You a have already organization";
                }
            }

            rez.msgForOwner = output;
            return(rez);
        }