blob: fe7260a0219a2bdec90cac41c24bff6d56d797e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tango.Core;
using Tango.Core.Helpers;
using Tango.Logging;
using Tango.PMR;
using Tango.PMR.Common;
using Tango.PMR.Integration;
using Tango.Settings;
using Tango.Transport.Adapters;
namespace Tango.Integration.Services
{
public class ExternalBridgeScanner : ExtendedObject
{
private Thread _discoveryThread;
private ObservableCollection<IExternalBridgeClient> _availableMachines;
/// <summary>
/// Gets or sets the available services.
/// </summary>
public ObservableCollection<IExternalBridgeClient> AvailableMachines
{
get { return _availableMachines; }
private set { _availableMachines = value; RaisePropertyChangedAuto(); }
}
private bool _isStarted;
/// <summary>
/// Gets or sets a value indicating whether this instance is started.
/// </summary>
public bool IsStarted
{
get { return _isStarted; }
private set { _isStarted = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Initializes a new instance of the <see cref="ExternalBridgeScanner"/> class.
/// </summary>
public ExternalBridgeScanner()
{
AvailableMachines = new ObservableCollection<IExternalBridgeClient>();
}
/// <summary>
/// Starts this instance.
/// </summary>
public void Start()
{
if (!IsStarted)
{
_discoveryThread = new Thread(DiscoveryThreadMethod);
_discoveryThread.IsBackground = true;
_discoveryThread.Start();
}
}
private void DiscoveryThreadMethod()
{
var Server = new UdpClient(8888);
while (!IsStarted)
{
var ClientEp = new IPEndPoint(IPAddress.Any, 0);
var ClientRequestData = Server.Receive(ref ClientEp);
ExternalBridgeUdpDiscoveryPacket packet = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(ClientRequestData);
ExternalBridgeClient newMachine = new ExternalBridgeClient(packet.SerialNumber, ClientEp.Address.ToString());
if (!AvailableMachines.ToList().Exists(x => x.SerialNumber == packet.SerialNumber))
{
ThreadsHelper.InvokeUINow(() =>
{
AvailableMachines.Add(newMachine);
});
}
Thread.Sleep(1000);
}
Server.Close();
}
/// <summary>
/// Stops this instance.
/// </summary>
public void Stop()
{
if (IsStarted)
{
IsStarted = false;
}
}
private void Client_StateChanged(object sender, Transport.TransportComponentState e)
{
if (e == Transport.TransportComponentState.Failed || e == Transport.TransportComponentState.Disposed)
{
AvailableMachines.Remove(sender as IExternalBridgeClient);
}
}
}
}
|