1
1
using System ;
2
- using System . ComponentModel ;
3
2
using System . IO ;
4
- using System . Net . Sockets ;
5
- using System . Text ;
3
+ using System . Xml ;
6
4
using System . Web ;
5
+ using System . Text ;
6
+ using System . Net . Sockets ;
7
+ using System . ComponentModel ;
7
8
using System . Windows . Forms ;
8
- using System . Xml ;
9
- using PluginCore ;
10
- using PluginCore . Helpers ;
9
+ using WeifenLuo . WinFormsUI ;
11
10
using PluginCore . Localization ;
12
- using PluginCore . Managers ;
13
11
using PluginCore . Utilities ;
12
+ using PluginCore . Managers ;
13
+ using PluginCore . Helpers ;
14
+ using PluginCore ;
14
15
15
16
namespace FlashConnect
16
17
{
@@ -24,6 +25,7 @@ public class PluginMain : IPlugin
24
25
private String settingFilename ;
25
26
private Settings settingObject ;
26
27
private XmlSocket xmlSocket ;
28
+ private Timer pendingSetup ;
27
29
28
30
#region Required Properties
29
31
@@ -103,6 +105,11 @@ public void Initialize()
103
105
/// </summary>
104
106
public void Dispose ( )
105
107
{
108
+ if ( this . pendingSetup != null )
109
+ {
110
+ this . pendingSetup . Stop ( ) ;
111
+ this . pendingSetup = null ;
112
+ }
106
113
this . SaveSettings ( ) ;
107
114
}
108
115
@@ -115,9 +122,9 @@ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority priority)
115
122
}
116
123
117
124
#endregion
118
-
125
+
119
126
#region Custom Methods
120
-
127
+
121
128
// Response messages and errors
122
129
private readonly Byte [ ] RESULT_INVALID = Encoding . Default . GetBytes ( "<flashconnect status=\" 1\" />\0 " ) ;
123
130
private readonly Byte [ ] RESULT_NOTFOUND = Encoding . Default . GetBytes ( "<flashconnect status=\" 2\" />\0 " ) ;
@@ -139,57 +146,65 @@ private void InitBasics()
139
146
/// </summary>
140
147
private void SetupSocket ( )
141
148
{
142
- if ( this . settingObject . Enabled && ! SingleInstanceApp . AlreadyExists )
149
+ this . pendingSetup = new Timer ( ) ;
150
+ this . pendingSetup . Interval = 5000 ;
151
+ this . pendingSetup . Tick += ( sender , e ) =>
143
152
{
144
- this . xmlSocket = new XmlSocket ( this . settingObject . Host , this . settingObject . Port ) ;
145
- this . xmlSocket . XmlReceived += new XmlReceivedEventHandler ( this . HandleXml ) ;
146
- }
153
+ this . pendingSetup . Stop ( ) ;
154
+ this . pendingSetup = null ;
155
+ if ( this . settingObject . Enabled && ! SingleInstanceApp . AlreadyExists )
156
+ {
157
+ this . xmlSocket = new XmlSocket ( this . settingObject . Host , this . settingObject . Port ) ;
158
+ this . xmlSocket . XmlReceived += new XmlReceivedEventHandler ( this . HandleXml ) ;
159
+ }
160
+ } ;
161
+ this . pendingSetup . Start ( ) ;
147
162
}
148
-
163
+
149
164
/// <summary>
150
165
/// Handles the incoming xml message
151
166
/// </summary>
152
167
public void HandleXml ( Object sender , XmlReceivedEventArgs e )
153
168
{
154
169
if ( PluginBase . MainForm . MenuStrip . InvokeRequired ) PluginBase . MainForm . MenuStrip . BeginInvoke ( ( MethodInvoker ) delegate
155
- {
156
- try
157
170
{
158
- XmlDocument message = e . XmlDocument ;
159
- XmlNode mainNode = message . FirstChild ;
160
- for ( Int32 i = 0 ; i < mainNode . ChildNodes . Count ; i ++ )
171
+ try
161
172
{
162
- XmlNode cmdNode = mainNode . ChildNodes [ i ] ;
163
- if ( XmlHelper . HasAttribute ( cmdNode , "cmd" ) )
173
+ XmlDocument message = e . XmlDocument ;
174
+ XmlNode mainNode = message . FirstChild ;
175
+ for ( Int32 i = 0 ; i < mainNode . ChildNodes . Count ; i ++ )
164
176
{
165
- String cmd = XmlHelper . GetAttribute ( cmdNode , "cmd" ) ;
166
- switch ( cmd )
177
+ XmlNode cmdNode = mainNode . ChildNodes [ i ] ;
178
+ if ( XmlHelper . HasAttribute ( cmdNode , " cmd" ) )
167
179
{
168
- case "call" :
169
- this . HandleCallMsg ( cmdNode , e . Socket ) ;
170
- break ;
171
- case "trace" :
172
- this . HandleTraceMsg ( cmdNode , e . Socket ) ;
173
- break ;
174
- case "notify" :
175
- this . HandleNotifyMsg ( cmdNode , e . Socket ) ;
176
- break ;
177
- case "return" :
178
- this . HandleReturnMsg ( cmdNode , e . Socket ) ;
179
- break ;
180
- default :
181
- ErrorManager . ShowError ( INVALID_MSG ) ;
182
- break ;
180
+ String cmd = XmlHelper . GetAttribute ( cmdNode , "cmd" ) ;
181
+ switch ( cmd )
182
+ {
183
+ case "call" :
184
+ this . HandleCallMsg ( cmdNode , e . Socket ) ;
185
+ break ;
186
+ case "trace" :
187
+ this . HandleTraceMsg ( cmdNode , e . Socket ) ;
188
+ break ;
189
+ case "notify" :
190
+ this . HandleNotifyMsg ( cmdNode , e . Socket ) ;
191
+ break ;
192
+ case "return" :
193
+ this . HandleReturnMsg ( cmdNode , e . Socket ) ;
194
+ break ;
195
+ default :
196
+ ErrorManager . ShowError ( INVALID_MSG ) ;
197
+ break ;
198
+ }
183
199
}
200
+ else ErrorManager . ShowError ( INVALID_MSG ) ;
184
201
}
185
- else ErrorManager . ShowError ( INVALID_MSG ) ;
186
202
}
187
- }
188
- catch ( Exception ex )
189
- {
190
- ErrorManager . ShowError ( ex ) ;
191
- }
192
- } ) ;
203
+ catch ( Exception ex )
204
+ {
205
+ ErrorManager . ShowError ( ex ) ;
206
+ }
207
+ } ) ;
193
208
}
194
209
195
210
/// <summary>
@@ -217,18 +232,18 @@ public void HandleCallMsg(XmlNode msgNode, Socket client)
217
232
/// </summary>
218
233
public void HandleTraceMsg ( XmlNode msgNode , Socket client )
219
234
{
220
- try
235
+ try
221
236
{
222
237
String message = HttpUtility . UrlDecode ( XmlHelper . GetValue ( msgNode ) ) ;
223
238
Int32 state = Convert . ToInt32 ( XmlHelper . GetAttribute ( msgNode , "state" ) ) ;
224
239
TraceManager . Add ( message , state ) ;
225
- }
240
+ }
226
241
catch
227
242
{
228
243
client . Send ( RESULT_INVALID ) ;
229
244
}
230
245
}
231
-
246
+
232
247
/// <summary>
233
248
/// Handles the notify message
234
249
/// </summary>
@@ -237,7 +252,7 @@ public void HandleNotifyMsg(XmlNode msgNode, Socket client)
237
252
String message ;
238
253
String guid ;
239
254
IPlugin plugin ;
240
- try
255
+ try
241
256
{
242
257
message = HttpUtility . UrlDecode ( XmlHelper . GetValue ( msgNode ) ) ;
243
258
guid = XmlHelper . GetAttribute ( msgNode , "guid" ) ;
@@ -248,23 +263,23 @@ public void HandleNotifyMsg(XmlNode msgNode, Socket client)
248
263
plugin . HandleEvent ( client , de , HandlingPriority . High ) ;
249
264
}
250
265
else client . Send ( RESULT_NOTFOUND ) ;
251
- }
266
+ }
252
267
catch
253
268
{
254
269
client . Send ( RESULT_INVALID ) ;
255
270
}
256
271
}
257
-
272
+
258
273
/// <summary>
259
274
/// Handles the return message
260
275
/// </summary>
261
276
public void HandleReturnMsg ( XmlNode msgNode , Socket client )
262
277
{
263
- try
278
+ try
264
279
{
265
280
Byte [ ] data = Encoding . ASCII . GetBytes ( msgNode . InnerXml + "\0 " ) ;
266
281
client . Send ( data ) ;
267
- }
282
+ }
268
283
catch
269
284
{
270
285
client . Send ( RESULT_INVALID ) ;
@@ -299,7 +314,7 @@ public void SaveSettings()
299
314
}
300
315
301
316
#endregion
302
-
317
+
303
318
}
304
-
305
- }
319
+
320
+ }
0 commit comments