Пример #1
0
        public void PropertyHash_ConcatenatesSelectedFieldsInOrder()
        {
            var hasher = new PropertyHash();
            var item   = new Cache.Item("url", "content", DateTime.Now);

            var hash = hasher.Hash(item, i => i.Url, i => i.Content);

            Assert.Equal("urlcontent", hash);
        }
Пример #2
0
        public void AlgorithmPropertyHash_AppliesHashingAlgorithmToSeed()
        {
            var hasher = new AlgorithmPropertyHash("sha256");
            var item   = new Cache.Item("url", "content", DateTime.Now);

            var hash = hasher.Hash(item, i => i.Url, i => i.Content);

            Assert.Equal("9FyLxk+9z73XO8xhZ15emMaK+oa8aDg6LWiY6y40KyQ=", hash);
        }
        public void Should_AlgorithmPropertyHash_AppliesHashingAlgorithToSeed()
        {
            //arrange
            var hasher = new AlgorithmPropertyHash("sha256");
            var item   = new Cache.Item("url", "content", DateTime.Now);

            //act
            var hash = hasher.Hash(item, i => i.Url, i => i.Content);

            //assert
            hash.Should().Equals("9FyLxk+9z73XO8xhZ15emMaK+oa8aDg6LWiY6y40KyQ=");
        }
        public void Should_PropertyHash_ConcatenatesSelectedFieldsInOrder()
        {
            //arrange
            var hasher = new PropertyHash();
            var item   = new Cache.Item("url", "content", DateTime.Now);

            //act
            var hash = hasher.Hash(item, i => i.Url, i => i.Content);

            //assert
            hash.Should().Equals("urlcontent");
        }
Пример #5
0
        /// <summary>
        /// Create or retrieve an image of the DataSource,
        /// saves in Image property.
        /// May raise NewImageAvailable event.
        /// </summary>
        public void Refresh()
        {
            // must have datasource to draw
            if (dataSource == null)
            {
                return;
            }

            // refresh the renderinfo
            // and hashvalue for cache retrieval
            UpdateRenderInfo(dataSource);

            if (RenderInfo.Dimension.X > 0.0f &&
                RenderInfo.Dimension.Y > 0.0f)
            {
                // decrease ref counts on last used cache-hit
                if (item != null)
                {
                    item.Refs--;
                }

                // try get image from cache
                if (!Cache.TryGetValue(AppearanceHash, out item))
                {
                    // prepare drawing
                    PrepareDraw();

                    // glowing background if marked
                    if (drawBackground)
                    {
                        DrawBackground();
                    }

                    // main rendering
                    DrawSubOverlays(true);
                    DrawMainOverlay();
                    DrawSubOverlays(false);

                    // post effects
                    DrawPostEffects();

                    // finish drawing
                    FinishDraw();

                    // possibly add image to cache
                    if (Cache.IsEnabled)
                    {
                        item       = new Cache.Item();
                        item.Key   = AppearanceHash;
                        item.Image = image;
                        item.Refs  = 1;
                        item.Tick  = DateTime.Now.Ticks;
                        item.Size  = 4U * (uint)(RenderInfo.Dimension.X * RenderInfo.Dimension.Y);

                        Cache.Add(AppearanceHash, item);
                    }
                }
                else
                {
                    image = item.Image;
                    item.Refs++;
                    item.Tick = DateTime.Now.Ticks;
                }

                // fire event
                RaiseNewImageAvailable();
            }
        }
Пример #6
0
 void Execute()
 {
     try
     {
         target.SearchName = name;
         int total = -1;
         for (int i = 0; i < 2; i++)
         {
             string type = i == 0 ? "exact" : "contains";
             string url = "http://sc2ranks.com/api/search/" + type + "/" + region + "/" + name + ".xml" + appkey;
             Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream();
             XmlReader reader = new XmlTextReader(stream);
             reader.MoveToContent();
             bool hasid = false;
             bool hasname = false;
             int lastid = 0;
             string lastname = null;
             while (reader.Read())
             {
                 if (reader.NodeType == XmlNodeType.Element)
                 {
                     string key = reader.Name;
                     reader.Read();
                     if (reader.NodeType == XmlNodeType.Text)
                     {
                         string value = reader.Value;
                         switch (key)
                         {
                             case "error":
                                 target.Error = value;
                                 if (target.Error == "no_characters") target.Error = "No match for '" + name + "'";
                                 break;
                             case "bnet-id":
                                 hasid = int.TryParse(value, out lastid);
                                 break;
                             case "name":
                                 lastname = value;
                                 hasname = true;
                                 break;
                             case "total":
                                 total = int.TryParse(value, out total) ? total : -1;
                                 break;
                         }
                     }
                 }
                 if (hasname && hasid)
                 {
                     Cache.Item item = new Cache.Item();
                     item.ID = lastid;
                     item.Name = lastname;
                     target.Items.Add(item);
                     hasname = false;
                     hasid = false;
                 }
                 if (target.Error != null) break;
             }
             if (i == 0)
             {
                 if (target.Error != null) target.Error = null;
                 else
                 {
                     target.Exact = true;
                     break;
                 }
             }
         }
         if (target.Error == null && (total == -1 || total > 10))
         {
             target.Error = "Too many hits (" + total.ToString() + ") to display, see http://sc2ranks.com/search/contains/" + region + "/" + name + " for all hits";
         }
         if (target.Error == null)
         {
             target.Region = region;
             foreach (Cache.Item item in target.Items)
             {
                 Cache.Details details = new Cache.Details();
                 details.Name = item.Name;
                 details.Link = "http://sc2ranks.com/char/" + region + "/" + item.ID + "/" + item.Name;
                 string url = "http://sc2ranks.com/api/base/teams/" + region + "/" + item.Name + "!" + item.ID.ToString() + ".xml" + appkey;
                 Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream();
                 XmlReader reader = new XmlTextReader(stream);
                 reader.MoveToContent();
                 Cache.Team team = new Cache.Team();
                 while (reader.Read())
                 {
                     if (reader.NodeType == XmlNodeType.Element)
                     {
                         string key = reader.Name;
                         reader.Read();
                         if (reader.NodeType == XmlNodeType.Text)
                         {
                             string value = reader.Value;
                             switch (key)
                             {
                                 case "division-rank":
                                     int.TryParse(value, out team.Rank);
                                     break;
                                 case "wins":
                                     int.TryParse(value, out team.Wins);
                                     break;
                                 case "bracket":
                                     int.TryParse(value, out team.Bracket);
                                     break;
                                 case "league":
                                     team.League = value;
                                     break;
                                 case "is-random":
                                     bool.TryParse(value, out team.IsRandom);
                                     break;
                                 case "points":
                                     int.TryParse(value, out team.Points);
                                     break;
                                 case "losses":
                                     int.TryParse(value, out team.Losses);
                                     break;
                                 case "updated-at":
                                     DateTime.TryParse(value, out team.Refreshed);
                                     break;
                             }
                         }
                     }
                     else if (reader.NodeType == XmlNodeType.EndElement)
                     {
                         if (reader.Name == "team")
                         {
                             details.Teams.Add(team);
                             team = new Cache.Team();
                         }
                     }
                 }
                 if (details.Teams.Count != 0)
                 {
                     details.Teams.Sort(new Comparison<Cache.Team>(CompareTeams));
                     target.Details.Add(details);
                 }
             }
         }
         target.Ready = true;
         target.Write(source, bracket);
     }
     catch (Exception ex)
     {
         Cache.RemoveEntry(target);
         source.ReplyChannel("Rank lookup failed: sc2ranks.com is unresponsive :(");
         Program.Log("Rank worker thread exception: " + ex.Message);
     }
 }