Changeset 2081


Ignore:
Timestamp:
Nov 11, 2010, 11:16:07 PM (11 years ago)
Author:
Sven Rech
Message:

CrypP2P tries to reconnect now when SystemLeft event occurs

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypP2P/Internal/ConnectionManager.cs

    r1698 r2081  
    1616
    1717using System;
     18using System.Threading;
    1819using Cryptool.P2P.Worker;
    1920using Cryptool.PluginBase;
     
    3132        private readonly object connectLock = new object();
    3233        private readonly P2PBase p2PBase;
     34        private DateTime lastConnectionAttempt;
    3335
    3436        public ConnectionManager(P2PBase p2PBase)
    3537        {
    3638            this.p2PBase = p2PBase;
     39
     40            bool reconnecting = false;
     41            p2PBase.OnSystemLeft += new P2PBase.SystemLeft(delegate
     42                                                               {
     43                                                                   //Enforce a minimum of 2 seconds between each connection attempt:
     44                                                                   if ((lastConnectionAttempt - DateTime.Now).TotalSeconds < 2)
     45                                                                       Thread.Sleep(2000);
     46
     47                                                                   P2PManager.GuiLogMessage("Lost P2P Connection. Try reconnecting...",
     48                                                                        NotificationLevel.Error);
     49                                                                   reconnecting = true;
     50                                                                   this.Connect();
     51                                                               });
     52            p2PBase.OnSystemJoined += new P2PBase.SystemJoined(delegate
     53                                                                   {
     54                                                                       if (p2PBase.IsConnected && reconnecting)
     55                                                                       {
     56                                                                           P2PManager.GuiLogMessage("Successfully reconnected!",
     57                                                                                NotificationLevel.Balloon);
     58                                                                           reconnecting = false;
     59                                                                       }
     60                                                                   });
    3761        }
    3862
     
    4468            lock (connectLock)
    4569            {
     70                lastConnectionAttempt = DateTime.Now;
     71
    4672                if (p2PBase.IsConnected || IsConnecting)
    4773                {
  • trunk/CrypP2P/Internal/P2PBase.cs

    r2020 r2081  
    358358        private void OnDhtSystemLeft(object sender, SystemLeftEventArgs e)
    359359        {
    360             if (OnSystemLeft != null)
    361                 OnSystemLeft();
    362 
    363360            IsConnected = false;
    364361            IsInitialized = false;
     
    370367
    371368            LogToMonitor("CrypP2P left the system.");
     369
     370            if (OnSystemLeft != null)
     371                OnSystemLeft();
    372372        }
    373373
  • trunk/CrypPlugins/P2PEditor/Distributed/JobListManager.cs

    r1727 r2081  
    103103            }
    104104
    105             var binaryReader = new BinaryReader(new MemoryStream(result.Data));
    106             distributedJob.Downloads = binaryReader.ReadInt32();
    107             distributedJob.LastDownload = DateTime.FromBinary(binaryReader.ReadInt64());
     105            if (result.Data != null)
     106            {
     107                var binaryReader = new BinaryReader(new MemoryStream(result.Data));
     108                distributedJob.Downloads = binaryReader.ReadInt32();
     109                distributedJob.LastDownload = DateTime.FromBinary(binaryReader.ReadInt64());
     110            }
    108111        }
    109112
  • trunk/CrypPlugins/P2PEditor/GUI/P2PEditorPresentation.xaml.cs

    r1918 r2081  
    2020using System.Windows.Threading;
    2121using Cryptool.P2P;
     22using Cryptool.P2P.Internal;
    2223using Cryptool.P2PEditor.Distributed;
    2324
     
    5657
    5758            P2PManager.ConnectionManager.OnP2PConnectionStateChangeOccurred += HandleChangedPeerToPeerConnectionState;
     59
     60            //We need this, because for a strange reason, the OnP2PConnectionStateChangeOccurred event is not triggered when reconnecting:
     61            P2PManager.P2PBase.OnSystemJoined += new P2PBase.SystemJoined(delegate
     62                                                                              {
     63                                                                                  HandleChangedPeerToPeerConnectionState
     64                                                                                      (null, true);
     65                                                                              });
    5866
    5967            InitializeComponent();
Note: See TracChangeset for help on using the changeset viewer.