Changeset 1648


Ignore:
Timestamp:
Jun 15, 2010, 6:02:14 PM (12 years ago)
Author:
Sven Rech
Message:

better quadratic sieve p2p representation

Location:
trunk/CrypPlugins/QuadraticSieve
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/QuadraticSieve/PeerToPeer.cs

    r1632 r1648  
    114114            byte[] y = new byte[decompressedYield.Length - 4];
    115115            Array.Copy(decompressedYield, 4, y, 0, y.Length);
     116
     117            ownerID = -1;
    116118
    117119            return y;
     
    299301            quadraticSieveQuickWatchPresentation.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    300302            {
    301                 quadraticSieveQuickWatchPresentation.amountOfPeers.Content = "" + activePeers.Count + " peers active!";
     303                quadraticSieveQuickWatchPresentation.amountOfPeers.Content = "" + activePeers.Count + " other peer" + (activePeers.Count!=1 ? "s" : "") + " active!";
    302304            }, null);
    303305        }
  • trunk/CrypPlugins/QuadraticSieve/ProgressYields.xaml.cs

    r1630 r1648  
    2121    {
    2222        private int ourID;
    23         private Random random = new Random();
    24         private Dictionary<int, SolidColorBrush> colorMap = new Dictionary<int, SolidColorBrush>();     //maps user ids to their colors
    25         private int peerAmount;
    26 
    27         public delegate void AmountOfClientsChangedHandler(int amount);
    28         public event AmountOfClientsChangedHandler AmountOfClientsChanged;
    2923
    3024        public void Set(int i, int id, string name)
    3125        {
    32             if (root.Children.Count <= i)   //if no rect exists for this yield yet
     26            if (root.Children.Count <= i)   //if no shape exists for this yield yet
    3327            {
    34                 //Create some rects to fill the gap:
     28                //Create some shapes to fill the gap:
    3529                for (int c = root.Children.Count; c < i; c++)
    36                     createYieldRect(c, 0, name);
     30                    CreateYieldShape(c, 0, name);
    3731                //create the rect:
    38                 createYieldRect(i, id, name);
     32                CreateYieldShape(i, id, name);
    3933            }
    4034            else
    4135            {
    42                 SetRectToStatus(root.Children[i] as Rectangle, id, name);
     36                SetShapeToStatus(i, id, name);
    4337            }
    4438        }
     
    4741        {
    4842            root.Children.Clear();
    49             peerAmount = 0;
    5043        }
    5144
     
    5548        }
    5649
    57         private void SetRectToStatus(Rectangle rectangle, int uploaderID, string uploaderName)
     50        private void SetShapeToStatus(int index, int uploaderID, string uploaderName)
    5851        {
    5952            ToolTip tooltip = new ToolTip();
     53            Shape shape = root.Children[index] as Shape;
     54
    6055            if (uploaderID == ourID)
    6156            {
    62                 rectangle.Fill = Brushes.Green;
     57                if (!(shape is Ellipse))
     58                {
     59                    root.Children.Remove(shape);
     60                    shape = GetYieldShape(uploaderID);                   
     61                    root.Children.Insert(index, shape);
     62                }
     63                shape.Fill = GetColor(uploaderID);
    6364                tooltip.Content = "This yield was sieved by us";
    6465            }
    6566            else if (uploaderID == 0)
    6667            {
    67                 rectangle.Fill = Brushes.Black;
     68                shape.Fill = Brushes.Black;
    6869                tooltip.Content = "This yield was sieved by an unknown user and we didn't load it yet";
    6970            }
    7071            else if (uploaderID == -1)
    7172            {
    72                 rectangle.Fill = Brushes.White;     //TODO: Proper representation here               
     73                if (!(shape is Path))
     74                {
     75                    root.Children.Remove(shape);
     76                    shape = GetYieldShape(-1);
     77                    root.Children.Insert(index, shape);
     78                }
     79                shape.Fill = Brushes.Black;
    7380                tooltip.Content = "This yield got lost";
    7481            }
    7582            else
    7683            {
    77                 rectangle.Fill = GetColor(uploaderID);
     84                shape.Fill = GetColor(uploaderID);
    7885                if (uploaderName == null)
    7986                    uploaderName = "other user";
    8087                tooltip.Content = "This yield was sieved by " + uploaderName + " but we loaded it";
    8188            }           
    82             rectangle.ToolTip = tooltip;
     89            shape.ToolTip = tooltip;
    8390        }
    8491
    8592        private Brush GetColor(int uploaderID)
    86         {
    87             if (!colorMap.ContainsKey(uploaderID))
    88             {
    89                 peerAmount++;
    90                 AmountOfClientsChanged(peerAmount);
    91                 SolidColorBrush color = new SolidColorBrush();
    92                 color.Color = GenerateRandomColor();
    93                 colorMap[uploaderID] = color;
    94                 return color;
    95             }
    96             else
    97                 return colorMap[uploaderID];
    98         }
     93        {           
     94            SolidColorBrush color = new SolidColorBrush();
     95            Random random = new Random(uploaderID);
    9996
    100         private Color GenerateRandomColor()
    101         {
    102             Color gen;
    10397            bool ok;
    10498            do
    10599            {
    106100                ok = true;
    107                 gen = Color.FromRgb((byte)random.Next(256), (byte)random.Next(256), (byte)random.Next(256));
     101                color.Color = Color.FromRgb((byte)random.Next(256), (byte)random.Next(256), (byte)random.Next(256));
    108102
    109                 //We want a color that doesn't look too similar to the other colors used:
    110                 if (SimilarColors(gen, Color.FromRgb(0, 0, 0)))             //Check Black similarity
     103                if (SimilarColors(color.Color, Color.FromRgb(0, 0, 0)))             //Check Black similarity
    111104                    ok = false;
    112                 else if (SimilarColors(gen, Color.FromRgb(255, 255, 255)))  //Check White similarity
     105                else if (SimilarColors(color.Color, Color.FromRgb(255, 255, 255)))  //Check White similarity
    113106                    ok = false;
    114                 else                                                        //Check similarity to all other colors
    115                 {
    116                     foreach (var b in colorMap.Values)
    117                     {
    118                         if (SimilarColors(b.Color, Color.FromRgb(255, 255, 255)))
    119                         {
    120                             ok = false;
    121                             break;
    122                         }
    123                     }
    124                 }
     107
    125108            } while (!ok);
    126             return gen;
     109
     110            return color;       
    127111        }
    128112
    129         private bool SimilarColors(Color gen, Color color)
     113        private bool SimilarColors(Color col1, Color col2)
    130114        {
    131             const int toleratedDifference = 15;
    132             int diffR = Math.Abs(gen.R - color.R);
    133             int diffG = Math.Abs(gen.G - color.G);
    134             int diffB = Math.Abs(gen.B - color.B);
     115            const int toleratedDifference = 20;
     116            int diffR = Math.Abs(col1.R - col2.R);
     117            int diffG = Math.Abs(col1.G - col2.G);
     118            int diffB = Math.Abs(col1.B - col2.B);
    135119            return (diffR < toleratedDifference) && (diffG < toleratedDifference) && (diffB < toleratedDifference);
    136120        }
    137121
    138         private void createYieldRect(int c, int id, string name)
     122        private void CreateYieldShape(int c, int id, string name)
    139123        {
    140             Rectangle rect = new Rectangle();                       
    141             rect.Width = 10;
    142             rect.Height = rect.Width;
    143             rect.Stroke = Brushes.White;
    144             rect.StrokeThickness = 0.1;
    145             SetRectToStatus(rect, id, name);
    146             root.Children.Add(rect);
     124            Shape shape = GetYieldShape(id);           
     125            root.Children.Add(shape);
     126            SetShapeToStatus(root.Children.Count-1, id, name);
     127        }
     128
     129        private Shape GetYieldShape(int id)
     130        {
     131            Shape shape;
     132            if (id == ourID)
     133                shape = new Ellipse();
     134            else if (id == -1)
     135                shape = new Path();
     136            else
     137                shape = new Rectangle();
     138
     139            shape.Width = 10;
     140            shape.Height = shape.Width;
     141            shape.Stroke = Brushes.White;
     142            shape.StrokeThickness = 0.1;
     143
     144            if (id == -1)       //Draw the null shape
     145            {
     146                Path path = shape as Path;
     147                RectangleGeometry rect = new RectangleGeometry();
     148                rect.Rect = new Rect(0, 0, 10, 10);
     149                LineGeometry line1 = new LineGeometry();
     150                line1.StartPoint = new Point(0, 0);
     151                line1.EndPoint = new Point(shape.Width, shape.Height);
     152                LineGeometry line2 = new LineGeometry();
     153                line2.StartPoint = new Point(shape.Width, 0);
     154                line2.EndPoint = new Point(0, shape.Height);
     155                GeometryGroup group = new GeometryGroup();
     156                group.Children.Add(rect);
     157                group.Children.Add(line1);
     158                group.Children.Add(line2);
     159                path.StrokeThickness = 1;
     160                path.Data = group;
     161            }
     162
     163            return shape;
    147164        }
    148165
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSievePresentation.xaml.cs

    r1628 r1648  
    3434            Grid.SetRow(progressYields, 0);
    3535            grid.Children.Add(progressYields);
    36             progressYields.MaxWidth = 200;
    37             progressYields.AmountOfClientsChanged += new Plugins.QuadraticSieve.ProgressYields.AmountOfClientsChangedHandler(progressYields_AmountOfClientsChanged);
    38         }
    39 
    40         void progressYields_AmountOfClientsChanged(int amount)
    41         {
    42             amountOfPeers.Content = "" + amount + " peers participated so far! ";
    43         }
     36            progressYields.MaxWidth = 200;           
     37        }       
    4438
    4539        public void sizeChanged(Object sender, EventArgs eventArgs)
Note: See TracChangeset for help on using the changeset viewer.