Changeset 1613


Ignore:
Timestamp:
Jun 9, 2010, 2:37:24 PM (12 years ago)
Author:
Sven Rech
Message:

quadratic sieve p2p changes

Location:
trunk/CrypPlugins/QuadraticSieve
Files:
2 edited

Legend:

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

    r1602 r1613  
    9191                    {
    9292                        byte[] yield = (byte[])storequeue.Dequeue();
    93                         P2PManager.Store(YieldIdentifier(head), yield);
    94                         //TODO: If versioning sytem tells us, that there is already a newer entry here, we load this value, enqueue it in loadqueue and try again with head++
     93                        bool success = P2PManager.Store(YieldIdentifier(head), yield);
     94                        while (!success)
     95                        {
     96                            downloaded = ReadAndEnqueueYield(head, downloaded, uploaded);
     97                            head++;
     98                            success = P2PManager.Store(YieldIdentifier(head), yield);
     99                        }
    95100                        SetProgressYield(head, YieldStatus.Ours);
     101
     102                        //increment and store new head:
    96103                        head++;
    97                         P2PManager.Store(HeadIdentifier(), System.Text.ASCIIEncoding.ASCII.GetBytes(head.ToString()));
    98                         //TODO: If versioning system tells us, that there is already a newer head entry, we ignore this and don't store ours
     104                        success = P2PManager.Store(HeadIdentifier(), System.Text.ASCIIEncoding.ASCII.GetBytes(head.ToString()));
     105                        if (!success)
     106                        {
     107                            //read head and check if ours is higher:
     108                            byte[] h = P2PManager.Retrieve(HeadIdentifier());
     109                            if (h != null)
     110                            {
     111                                int dhthead = int.Parse(System.Text.ASCIIEncoding.ASCII.GetString(h));
     112                                if (head > dhthead)
     113                                    P2PManager.Store(HeadIdentifier(), System.Text.ASCIIEncoding.ASCII.GetBytes(head.ToString()));  //try to store again
     114                            }
     115                        }
     116
     117                        //show informations about the uploaded yield:
    99118                        uploaded += (uint)yield.Length;
    100119                        ShowTransfered(downloaded, uploaded);
     
    104123                        if (loadIndex < loadEnd)
    105124                        {
    106                             byte[] yield = ReadYield(loadIndex);
    107                             downloaded += (uint)yield.Length;
    108                             ShowTransfered(downloaded, uploaded);
    109                             loadqueue.Enqueue(yield);
    110                             SetProgressYield(loadIndex, YieldStatus.OthersLoaded);
    111                             loadIndex++;
    112                             yieldEvent.Set();
     125                            downloaded = ReadAndEnqueueYield(loadIndex, downloaded, uploaded);
     126                            loadIndex++;                           
    113127                        }
    114128                        else                //if there is nothing left to load, we can slow down.
     
    123137                return;
    124138            }
     139        }
     140
     141        private uint ReadAndEnqueueYield(int loadIndex, uint downloaded, uint uploaded)
     142        {
     143            byte[] yield = ReadYield(loadIndex);
     144            downloaded += (uint)yield.Length;
     145            ShowTransfered(downloaded, uploaded);
     146            loadqueue.Enqueue(yield);
     147            SetProgressYield(loadIndex, YieldStatus.OthersLoaded);
     148            yieldEvent.Set();
     149            return downloaded;
    125150        }
    126151
     
    286311                bformatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
    287312                bformatter.Serialize(memstream, factorManager);
    288                 P2PManager.Store(FactorListIdentifier(), memstream.ToArray());
     313                bool success = P2PManager.Store(FactorListIdentifier(), memstream.ToArray());
     314                if (!success)
     315                {
     316                    Thread.Sleep(1000);
     317                    SyncFactorManager(factorManager);       //Just try again
     318                }
    289319            }
    290320
  • trunk/CrypPlugins/QuadraticSieve/QuadraticSieve.cs

    r1596 r1613  
    6363        private PeerToPeer peerToPeer;
    6464        private bool usePeer2Peer;
    65         private bool useGnuplot = true;
     65        private bool useGnuplot = false;
    6666        private StreamWriter gnuplotFile;
    6767
Note: See TracChangeset for help on using the changeset viewer.