Changeset 1630


Ignore:
Timestamp:
Jun 13, 2010, 11:44:00 PM (11 years ago)
Author:
Sven Rech
Message:

quadratic sieve changes

Location:
trunk/CrypPlugins/QuadraticSieve
Files:
3 edited

Legend:

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

    r1629 r1630  
    144144                if (!activePeers.Contains(ownerID))
    145145                {
    146                     UpdatePeerPerformance(ownerID);
     146                    UpdatePeerPerformanceAndAliveInformation(ownerID);
    147147                    activePeers.Add(ownerID);
    148148                    UpdateActivePeerInformation();
     
    224224                    SynchronizeHead();
    225225
     226                    bool busy = false;
     227
    226228                    if (storequeue.Count != 0)  //store our packages
    227229                    {
     
    241243                        uploaded += (uint)yield.Length;
    242244                        ShowTransfered(downloaded, uploaded);
     245                        busy = true;
    243246                    }
    244                     else                      //if there is nothing to store, we can load the other yields.
     247
     248                    //load the other yields:
     249
     250                    //skip all indices which are uploaded by us:
     251                    while (ourIndices.Contains(loadIndex))
     252                        loadIndex++;
     253
     254                    if (loadIndex < head)
    245255                    {
    246                         //skip all indices which are uploaded by us:
    247                         while (ourIndices.Contains(loadIndex))
    248                             loadIndex++;
    249 
    250                         if (loadIndex < head)
     256                        downloaded = TryReadAndEnqueueYield(loadIndex, downloaded, uploaded, lostIndices);
     257                        loadIndex++;
     258                        busy = true;
     259                    }
     260                   
     261                    //check all lost indices which are last checked longer than 2 minutes ago (but only if we have nothing else to do):
     262                    if (!busy)
     263                    {
     264                        int count = 0;                       
     265                        //TODO: Maybe we should throw away those indices, which have been checked more than several times.
     266                        while (lostIndices.Count != 0 && lostIndices.Peek().Value.CompareTo(DateTime.Now.Subtract(new TimeSpan(0, 2, 0))) < 0)
    251267                        {
     268                            var e = lostIndices.Dequeue();
    252269                            downloaded = TryReadAndEnqueueYield(loadIndex, downloaded, uploaded, lostIndices);
    253                             loadIndex++;
     270                            count++;
    254271                        }
    255                         else
    256                         {
    257                             int count = 0;
    258                             //check all lost indices which are last checked longer than 1 minutes ago:
    259                             //TODO: Maybe we should throw away those indices, which have been checked more than several times.
    260                             while (lostIndices.Count != 0 && lostIndices.Peek().Value.CompareTo(DateTime.Now.Subtract(new TimeSpan(0, 1, 0))) < 0)
    261                             {
    262                                 var e = lostIndices.Dequeue();
    263                                 downloaded = TryReadAndEnqueueYield(loadIndex, downloaded, uploaded, lostIndices);
    264                                 count++;
    265                             }
    266 
    267                             if (count == 0)
    268                                 Thread.Sleep(5000);    //Wait 5 seconds
    269                         }
     272
     273                        if (count == 0)
     274                            Thread.Sleep(5000);    //Wait 5 seconds
    270275                    }
     276
    271277                }
    272278            }
     
    285291        }
    286292
    287         private void UpdatePeerPerformance(int peerID)
     293        private void UpdatePeerPerformanceAndAliveInformation(int peerID)
    288294        {
    289295            byte[] performancebytes = P2PManager.Retrieve(PerformanceIdentifier(peerID));
     
    480486            //store our name:
    481487            P2PManager.Retrieve(NameIdentifier(ourID));     //just to outsmart the versioning system
    482             P2PManager.Store(NameIdentifier(ourID),  System.Text.ASCIIEncoding.ASCII.GetBytes(ourName.ToCharArray())); //TODO: proper name here!
     488            P2PManager.Store(NameIdentifier(ourID),  System.Text.ASCIIEncoding.ASCII.GetBytes(ourName.ToCharArray()));
    483489
    484490            if (loadStoreThread != null)
  • trunk/CrypPlugins/QuadraticSieve/ProgressYields.xaml.cs

    r1628 r1630  
    2222        private int ourID;
    2323        private Random random = new Random();
    24         private Dictionary<int, Brush> colorMap = new Dictionary<int, Brush>();     //maps user ids to their colors
     24        private Dictionary<int, SolidColorBrush> colorMap = new Dictionary<int, SolidColorBrush>();     //maps user ids to their colors
    2525        private int peerAmount;
    2626
     
    9090                AmountOfClientsChanged(peerAmount);
    9191                SolidColorBrush color = new SolidColorBrush();
    92                 color.Color = Color.FromRgb((byte)random.Next(256), (byte)random.Next(256), (byte)random.Next(256));
     92                color.Color = GenerateRandomColor();
    9393                colorMap[uploaderID] = color;
    9494                return color;
     
    9696            else
    9797                return colorMap[uploaderID];
     98        }
     99
     100        private Color GenerateRandomColor()
     101        {
     102            Color gen;
     103            bool ok;
     104            do
     105            {
     106                ok = true;
     107                gen = Color.FromRgb((byte)random.Next(256), (byte)random.Next(256), (byte)random.Next(256));
     108
     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
     111                    ok = false;
     112                else if (SimilarColors(gen, Color.FromRgb(255, 255, 255)))  //Check White similarity
     113                    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                }
     125            } while (!ok);
     126            return gen;
     127        }
     128
     129        private bool SimilarColors(Color gen, Color color)
     130        {
     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);
     135            return (diffR < toleratedDifference) && (diffG < toleratedDifference) && (diffB < toleratedDifference);
    98136        }
    99137
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.cs

    r1629 r1630  
    566566                double estimatedElapsedTime = estimatedTotalTime * p;
    567567
    568                 //Calculate the time left:
     568                //Calculate time left:
    569569                msleft = estimatedTotalTime - estimatedElapsedTime;
    570                 GuiLogMessage("Total: " + new TimeSpan(0, 0, 0, 0, (int)estimatedTotalTime), NotificationLevel.Info);
    571                 GuiLogMessage("Elapsed: " + new TimeSpan(0, 0, 0, 0, (int)estimatedElapsedTime), NotificationLevel.Info);
     570                /*GuiLogMessage("Total: " + new TimeSpan(0, 0, 0, 0, (int)estimatedTotalTime), NotificationLevel.Info);
     571                GuiLogMessage("Elapsed: " + new TimeSpan(0, 0, 0, 0, (int)estimatedElapsedTime), NotificationLevel.Info);*/
    572572            }           
    573573           
     
    718718            if (conf_list != null)
    719719            {
     720                ArrayList cl = conf_list;
     721                conf_list = null;
     722
    720723                running = false;
    721724                if (usePeer2Peer)
     
    724727                MethodInfo stop = msieve.GetMethod("stop");
    725728                MethodInfo getObjFromConf = msieve.GetMethod("getObjFromConf");
    726                 foreach (IntPtr conf in conf_list)
     729                foreach (IntPtr conf in cl)
    727730                    stop.Invoke(null, new object[] { getObjFromConf.Invoke(null, new object[] { conf }) });
    728731                GuiLogMessage("Waiting for threads to stop!", NotificationLevel.Debug);
     
    732735                }
    733736                GuiLogMessage("Threads stopped!", NotificationLevel.Debug);
    734                 conf_list.Clear();
    735737            }
    736738        }   
Note: See TracChangeset for help on using the changeset viewer.