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

Last change on this file since 2358 was 2358, checked in by kopal, 11 years ago
  • multiple connections to the p2p network are now avoided
  • some design changes
File size: 6.6 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;
24using System.Threading;
25using System.Windows.Media.Animation;
26
27namespace Cryptool.P2PEditor.GUI
28{
29    /// <summary>
30    /// Interaction logic for P2PEditorPresentation.xaml
31    /// </summary>
32    public partial class P2PEditorPresentation
33    {
34        public static readonly DependencyProperty JobsProperty = DependencyProperty.Register("Jobs",
35                                                                                             typeof (
36                                                                                                 List<DistributedJob>),
37                                                                                             typeof (
38                                                                                                 P2PEditorPresentation));
39
40        public static readonly DependencyProperty IsP2PConnectedProperty =
41            DependencyProperty.Register("IsP2PConnected",
42                                        typeof (
43                                            Boolean),
44                                        typeof (
45                                            P2PEditorPresentation), new PropertyMetadata(false));
46
47        public static readonly DependencyProperty IsP2PConnectingProperty =
48            DependencyProperty.Register("IsP2PConnecting",
49                                        typeof(
50                                            Boolean),
51                                        typeof(
52                                            P2PEditorPresentation), new PropertyMetadata(false));
53
54        public P2PEditorPresentation(P2PEditor p2PEditor, JobListManager jobListManager)
55        {
56            P2PEditor = p2PEditor;
57            JobListManager = jobListManager;
58            P2PEditorPresentation = this;
59
60            P2PManager.ConnectionManager.OnP2PConnectionStateChangeOccurred += HandleChangedPeerToPeerConnectionState;
61
62            //We need this, because for a strange reason, the OnP2PConnectionStateChangeOccurred event is not triggered when reconnecting:
63            P2PManager.P2PBase.OnSystemJoined += new P2PBase.SystemJoined(delegate
64                                                                              {
65                                                                                  HandleChangedPeerToPeerConnectionState
66                                                                                      (null, true);
67                                                                              });
68
69            InitializeComponent();
70
71            UpdateDisplay();
72
73            this.Connect.P2PEditorPresentation = this;
74            this.GetNewCertificate.P2PEditorPresentation = this;
75            this.JobCreation.P2PEditorPresentation = this;
76            this.JobDisplay.P2PEditorPresentation = this;
77        }
78
79        private void HandleChangedPeerToPeerConnectionState(object sender, bool newState)
80        {
81            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateConnectionState));
82
83            if (P2PManager.IsConnected)
84            {
85                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowActiveJobsView));
86            }
87            else
88            {
89                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowConnectView));
90            }
91        }
92
93        public List<DistributedJob> Jobs
94        {
95            get { return (List<DistributedJob>) GetValue(JobsProperty); }
96            set { SetValue(JobsProperty, value); }
97        }
98
99        public Boolean IsP2PConnected
100        {
101            get { return (Boolean) GetValue(IsP2PConnectedProperty); }
102            set { SetValue(IsP2PConnectedProperty, value); }
103        }
104
105        public Boolean IsP2PConnecting
106        {
107            get { return (Boolean)GetValue(IsP2PConnectingProperty); }
108            set { SetValue(IsP2PConnectingProperty, value); }
109        }
110
111        private void UpdateDisplay()
112        {
113            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateConnectionState));
114            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(JobDisplay.UpdateJobList));
115        }
116
117        internal void UpdateConnectionState()
118        {
119            IsP2PConnected = P2PManager.IsConnected;
120            IsP2PConnecting = P2PManager.IsConnecting;
121        }
122
123
124        internal void hideAllViews()
125        {
126            this.JobCreation.Visibility = Visibility.Hidden;
127            this.JobDisplay.Visibility = Visibility.Hidden;
128            this.Connect.Visibility = Visibility.Hidden;
129            this.GetNewCertificate.Visibility = Visibility.Hidden;           
130        }
131
132        internal void ShowGetNewCertificateView()
133        {
134            hideAllViews();
135            this.GetNewCertificate.Visibility = Visibility.Visible;           
136        }
137
138        internal void ShowJobCreationView()
139        {
140            hideAllViews();
141            this.JobCreation.Visibility = Visibility.Visible;
142        }
143
144        internal void ShowActiveJobsView()
145        {
146            hideAllViews();
147            this.JobDisplay.Visibility = Visibility.Visible;
148            UpdateDisplay();           
149        }
150
151        internal void ShowConnectView()
152        {
153            hideAllViews();
154            this.Connect.Visibility = Visibility.Visible;           
155        }
156
157        internal void ShowHelp()
158        {         
159            //to be implemented
160        }
161
162        private void P2PEditorControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
163        {
164            if (this.IsP2PConnecting || !this.IsP2PConnected)
165            {
166                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(ShowConnectView));               
167            }
168        }
169    }
170}
Note: See TracBrowser for help on using the repository browser.