source: trunk/CrypPlugins/P2PEditor/GUI/P2PEditorPresentation.xaml.cs @ 2277

Last change on this file since 2277 was 2081, checked in by Sven Rech, 11 years ago

CrypP2P tries to reconnect now when SystemLeft event occurs

File size: 5.5 KB
Line 
1/*
2   Copyright 2010 Paul Lelgemann, University of Duisburg-Essen
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Collections.Generic;
19using System.Windows;
20using System.Windows.Threading;
21using Cryptool.P2P;
22using Cryptool.P2P.Internal;
23using Cryptool.P2PEditor.Distributed;
24
25namespace Cryptool.P2PEditor.GUI
26{
27    /// <summary>
28    /// Interaction logic for P2PEditorPresentation.xaml
29    /// </summary>
30    public partial class P2PEditorPresentation
31    {
32        public static readonly DependencyProperty JobsProperty = DependencyProperty.Register("Jobs",
33                                                                                             typeof (
34                                                                                                 List<DistributedJob>),
35                                                                                             typeof (
36                                                                                                 P2PEditorPresentation));
37
38        public static readonly DependencyProperty IsP2PConnectedProperty =
39            DependencyProperty.Register("IsP2PConnected",
40                                        typeof (
41                                            Boolean),
42                                        typeof (
43                                            P2PEditorPresentation), new PropertyMetadata(false));
44
45        public static readonly DependencyProperty IsP2PConnectingProperty =
46            DependencyProperty.Register("IsP2PConnecting",
47                                        typeof(
48                                            Boolean),
49                                        typeof(
50                                            P2PEditorPresentation), new PropertyMetadata(false));
51
52        public P2PEditorPresentation(P2PEditor p2PEditor, JobListManager jobListManager)
53        {
54            P2PEditor = p2PEditor;
55            JobListManager = jobListManager;
56            P2PEditorPresentation = this;
57
58            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                                                                              });
66
67            InitializeComponent();
68
69            UpdateDisplay();
70
71            if (!P2PManager.IsConnected)
72            {
73                ShowConnectTab();
74            }
75        }
76
77        private void HandleChangedPeerToPeerConnectionState(object sender, bool newState)
78        {
79            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateConnectionState));
80
81            if (P2PManager.IsConnected)
82            {
83                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowActiveJobs));
84            }
85            else
86            {
87                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowConnectTab));
88            }
89        }
90
91        public List<DistributedJob> Jobs
92        {
93            get { return (List<DistributedJob>) GetValue(JobsProperty); }
94            set { SetValue(JobsProperty, value); }
95        }
96
97        public Boolean IsP2PConnected
98        {
99            get { return (Boolean) GetValue(IsP2PConnectedProperty); }
100            set { SetValue(IsP2PConnectedProperty, value); }
101        }
102
103        public Boolean IsP2PConnecting
104        {
105            get { return (Boolean)GetValue(IsP2PConnectingProperty); }
106            set { SetValue(IsP2PConnectingProperty, value); }
107        }
108
109        private void UpdateDisplay()
110        {
111            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateConnectionState));
112            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ActiveJobsControl.UpdateJobList));
113        }
114
115        internal void UpdateConnectionState()
116        {
117            IsP2PConnected = P2PManager.IsConnected;
118            IsP2PConnecting = P2PManager.IsConnecting;
119        }
120
121        internal void ShowJobCreation()
122        {
123            JobTabControl.SelectedItem = JobCreationTab;
124        }
125
126        internal void ShowActiveJobs()
127        {
128            UpdateDisplay();
129            JobTabControl.SelectedItem = ActiveJobsTab;
130        }
131
132        internal void ShowConnectTab()
133        {
134            JobTabControl.SelectedItem = ConnectTab;
135        }
136
137        internal void ShowHelp()
138        {
139            JobTabControl.SelectedItem = AboutTab;
140        }
141    }
142}
Note: See TracBrowser for help on using the repository browser.