示例#1
0
        public JsonScheme createScheme(Memberhandler memberhandler)
        {
            List <Member> members = memberhandler.getMembers();
            JsonScheme    scheme  = new JsonScheme();

            if (members.Count < 3)
            {
                scheme.message = "Too few participants :(, get more friends!";
                return(scheme);
            }
            members = memberhandler.createDates(members);
            foreach (Member m in members)
            {
                List <string> starter = m.starter != null?m.starter.getNames() : null;

                List <string> dinner = m.dinner != null?m.dinner.getNames() : null;

                List <string> dessert = m.dessert != null?m.dessert.getNames() : null;

                JsonMember member = new JsonMember();
                member.names   = m.getNames();
                member.duty    = m.duty;
                member.starter = starter;
                member.dessert = dessert;
                member.dinner  = dinner;

                scheme.dateList.Add(member);
            }
            return(scheme);
        }
示例#2
0
 /// <summary>
 /// Adds an <see cref="JsonMember"/> object to the
 /// <seealso cref="IJsonCollection"/>.
 /// </summary>
 /// <param name="member">
 /// The <seealso cref="JsonMember"/> object to be added to the
 /// <see cref="IJsonCollection"/>.
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// <paramref name="member"/> is <c>null</c>.
 /// </exception>
 public void Add(JsonMember member)
 {
     if (member == null)
     {
         throw new ArgumentNullException("member");
     }
     members_.Add(member);
 }
        public void Write(JsonMember value)
        {
            var name = value.NameString;

            if (value.IsEscapedAndQuoted)
            {
                name = JsonUtils.UnescapeAndUnquote(name);
            }

            this.WriteString(name);
        }
示例#4
0
        /// <inheritdoc/>
        /// <exception cref="ArgumentOutOfRangeException">
        /// <paramref name="token"/> is not instance of the
        /// <see cref="JsonMember"/> class.
        /// </exception>
        void IJsonCollection.Add(IJsonToken token)
        {
            JsonMember member = token as JsonMember;

            if (token == null)
            {
                throw new ArgumentOutOfRangeException(string.Format(
                                                          StringResources.Arg_WrongType, "token", "JsonObject.JsonMember"));
            }
            Add(member);
        }
 public IHttpActionResult AddMember([FromBody] JsonMember member)
 {
     if (member != null)
     {
         member.Id    = id;
         id           = id + 1;
         member.names = member.names.FindAll(p => p != "");
         members.Add(member);
     }
     return(Ok(member));
 }
示例#6
0
            /// <summary>
            /// Visit a JSON object.
            /// </summary>
            /// <param name="jsonObject">The JSON object to visit.</param>
            /// <returns>The JSON value that was modified from the visitor.</returns>
            protected override JsonValue Visit(JsonObject jsonObject)
            {
                var metadata = new JsonMember("meta",
                                              new JsonObject(
                                                  new JsonMember("version", new JsonString("1.0.0.0")),
                                                  new JsonMember("source", new JsonString("https://mythology.stackexchange.com")),
                                                  new JsonMember("attribution", new JsonString("The content published here comes from the Mythology site on the StackExchange network.")),
                                                  new JsonMember("time", new JsonString(DateTime.Now.ToString("D")))));

                var members = jsonObject.Members.Union(new[] { metadata });

                return(new JsonObject(members.ToList()));
            }
示例#7
0
文件: Object.cs 项目: blqw/blqw.Json
 private static void Write(ref CommaHelper comma, JsonMember member, object value, JsonWriterArgs args)
 {
     if (value == null || value is DBNull)
     {
         if (args.IgnoreNullMember)
         {
             return;
         }
         comma.AppendCommaIgnoreFirst();
         args.Writer.Write(member.EncodedJsonName);
         args.Colon();
         args.WriterContainer.GetNullWriter().Write(null, args);
     }
     else
     {
         comma.AppendCommaIgnoreFirst();
         args.Writer.Write(member.EncodedJsonName);
         args.Colon();
         args.WriteCheckLoop(value, null);
     }
 }
示例#8
0
 /// <summary>
 /// Returns a value indicating whether the JSON Member has a non-null value.
 /// </summary>
 /// <param name="jsonMember">The JSON member to test.</param>
 /// <returns>true if the JSON member has a non-null value, false if not.</returns>
 static bool IsNotNull(JsonMember jsonMember)
 {
     return(jsonMember.Value.GetType() != typeof(JsonNull));
 }
示例#9
0
        public static void JsonSave(ExtendedStats exdata, string userName = "", bool manual = false)
        {
            if (!BTD.WindowData.Json && !manual)
            {
                return;
            }

            var data = exdata.BaseStats;
            var Boss = exdata.Entity.Info;

            /*
             * Select save directory
             */
            var fileName = BTD.WindowData.ExcelPathTemplate.Replace("{Area}", Boss.Area.Replace(":", "-")).Replace("{Boss}", Boss.Name.Replace(":", "-"))
                           .Replace("{Date}", DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture))
                           .Replace("{Time}", DateTime.Now.ToString("HH-mm-ss", CultureInfo.InvariantCulture))
                           .Replace("{User}", string.IsNullOrEmpty(userName) ? "_____" : userName) + ".7z";

            var fname = Path.Combine(BTD.WindowData.ExcelSaveDirectory, fileName);

            /*
             * Test if you have access to the user choice directory, if not, switch back to the default save directory
             */
            try { Directory.CreateDirectory(Path.GetDirectoryName(fname)); }
            catch {
                fname = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), fileName);
                Directory.CreateDirectory(Path.GetDirectoryName(fname));
            }

            var file = new FileInfo(fname);

            if (file.Exists)
            {
                return;
            }
            //the only case this can happen is BAM mobtraining, that's not so interesting statistic to deal with more complex file names.

            var jsonData = new JsonData();

            jsonData.areaId             = data.areaId;
            jsonData.bossId             = data.bossId;
            jsonData.encounterUnixEpoch = data.encounterUnixEpoch.ToString();
            jsonData.fightDuration      = data.fightDuration;
            jsonData.partyDps           = data.partyDps;
            foreach (var entity in exdata.AllSkills.GetEntities())
            {
                var e = entity as NpcEntity;
                if (e != null)
                {
                    var mob = new JsonMob();
                    mob.entityId      = e.Id.Id.ToString();
                    mob.huntingZoneId = e.Info.HuntingZoneId;
                    mob.templateId    = e.Info.TemplateId;
                    var abnormals = exdata.Abnormals.Get(e);
                    foreach (var abnormal in abnormals)
                    {
                        foreach (var duration in abnormal.Value.AllDurations())
                        {
                            mob.abnormals.Add(new JsonAbnormal()
                            {
                                id    = abnormal.Key.Id,
                                start = (int)((duration.Begin - exdata.FirstTick) / TimeSpan.TicksPerMillisecond),
                                end   = (int)((duration.End - exdata.FirstTick) / TimeSpan.TicksPerMillisecond),
                                stack = duration.Stack
                            });
                        }
                    }

                    jsonData.mobs.Add(mob);
                }
            }

            foreach (var member in data.members)
            {
                var player     = PacketProcessor.Instance.PlayerTracker.Get(member.playerServerId, member.playerId);
                var jsonMember = new JsonMember();
                jsonMember.entityId                    = player.User.Id.Id.ToString();
                jsonMember.templateId                  = player.RaceGenderClass.Raw;
                jsonMember.playerServerId              = member.playerServerId;
                jsonMember.playerId                    = member.playerId;
                jsonMember.playerServer                = member.playerServer;
                jsonMember.playerName                  = member.playerName;
                jsonMember.playerClass                 = member.playerClass;
                jsonMember.guild                       = member.guild;
                jsonMember.aggro                       = member.aggro;
                jsonMember.healCrit                    = member.healCrit;
                jsonMember.playerDeaths                = member.playerDeaths;
                jsonMember.playerDeathDuration         = member.playerDeathDuration;
                jsonMember.playerDps                   = member.playerDps;
                jsonMember.playerTotalDamage           = member.playerTotalDamage;
                jsonMember.playerTotalDamagePercentage = member.playerTotalDamagePercentage;
                jsonMember.playerAverageCritRate       = member.playerAverageCritRate;
                var skills = exdata.AllSkills.GetSkillsDealt(player.User, null, true).OrderBy(x => x.Time);
                foreach (var skill in skills)
                {
                    var jsonSkill = new JsonSkill();
                    jsonSkill.time    = (int)((skill.Time - exdata.FirstTick) / TimeSpan.TicksPerMillisecond);
                    jsonSkill.type    = (int)skill.Type;
                    jsonSkill.crit    = skill.Critic;
                    jsonSkill.dot     = skill.HotDot;
                    jsonSkill.skillId = BTD.SkillDatabase.GetSkillByPetName(skill.Pet?.Name, player.RaceGenderClass)?.Id ?? skill.SkillId;
                    jsonSkill.amount  = skill.Amount.ToString();
                    jsonSkill.target  = skill.Target.Id.Id == ulong.MaxValue ? null : skill.Target.Id.Id.ToString();
                    jsonMember.dealtSkillLog.Add(jsonSkill);
                }

                skills = exdata.AllSkills.GetSkillsReceived(player.User, true).OrderBy(x => x.Time);
                foreach (var skill in skills)
                {
                    var jsonSkill = new JsonSkill();
                    jsonSkill.time    = (int)((skill.Time - exdata.FirstTick) / TimeSpan.TicksPerMillisecond);
                    jsonSkill.type    = (int)skill.Type;
                    jsonSkill.crit    = skill.Critic;
                    jsonSkill.dot     = skill.HotDot;
                    jsonSkill.skillId = BTD.SkillDatabase.GetSkillByPetName(skill.Pet?.Name, player.RaceGenderClass)?.Id ?? skill.SkillId;
                    jsonSkill.amount  = skill.Amount.ToString();
                    jsonSkill.source  = skill.Source.Id.Id == ulong.MaxValue ? null : skill.Source.Id.Id.ToString();
                    jsonMember.receivedSkillLog.Add(jsonSkill);
                }

                var abnormals = exdata.Abnormals.Get(player);
                foreach (var abnormal in abnormals.Times)
                {
                    foreach (var duration in abnormal.Value.AllDurations())
                    {
                        jsonMember.abnormals.Add(new JsonAbnormal()
                        {
                            id    = abnormal.Key.Id,
                            start = (int)((duration.Begin - exdata.FirstTick) / TimeSpan.TicksPerMillisecond),
                            end   = (int)((duration.End - exdata.FirstTick) / TimeSpan.TicksPerMillisecond),
                            stack = duration.Stack
                        });
                    }
                }

                jsonData.players.Add(jsonMember);
            }

            Task.Run(() => {
                lock (savelock) //don't save 2 files at one time
                {
                    if (file.Exists)
                    {
                        return;
                    }                            //double check if file was created while we were preparing export in other thread

                    var libpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Environment.Is64BitProcess ? "lib/7z_x64.dll" : "lib/7z.dll");
                    SevenZipBase.SetLibraryPath(libpath);
                    var compressor = new SevenZipCompressor {
                        ArchiveFormat = OutArchiveFormat.SevenZip
                    };
                    compressor.CustomParameters["tc"] = "off";
                    compressor.CompressionLevel       = CompressionLevel.Ultra;
                    compressor.CompressionMode        = CompressionMode.Create;
                    compressor.TempFolderPath         = Path.GetTempPath();
                    compressor.PreserveDirectoryRoot  = false;
                    compressor.DefaultItemName        = Path.GetFileNameWithoutExtension(fileName) + ".json";
                    using MemoryStream s       = new MemoryStream();
                    using StreamWriter w       = new StreamWriter(s);
                    using JsonTextWriter jsonw = new JsonTextWriter(w);
                    JsonSerializer ser         = new JsonSerializer();
                    ser.NullValueHandling      = NullValueHandling.Ignore;
                    ser.Formatting             = Formatting.Indented;
                    ser.Serialize(jsonw, jsonData);
                    jsonw.Flush();
                    s.Position   = 0;
                    using var cs = File.Create(fname);
                    compressor.CompressStream(s, cs);
                }
            });
        }