aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Converters/UsersRolesToStringConverter.cs
blob: e607b13d5f5fec20c8d5e0d4c774913de923e8fa (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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Authentication;
using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
using Tango.Integration.Operation;
using Tango.PMR.Common;
using Tango.PMR.Connection;
using Tango.PMR.Integration;
using Tango.Settings;
using Tango.Transport;
using Tango.Transport.Adapters;
using Tango.Transport.Transporters;

namespace Tango.Integration.ExternalBridge
{
    /// <summary>
    /// Represents a secure external bridge TCP client.
    /// </summary>
    /// <seealso cref="Tango.Transport.Transporters.BasicTransporter" />
    /// <seealso cref="Tango.Integration.ExternalBridge.IExternalBridgeSecureClient" />
    public class ExternalBridgeT
pan class="w"> #region Properties private String _serialNumber; /// <summary> /// Gets the machine serial number. /// </summary> public String SerialNumber { get { return _serialNumber; } set { _serialNumber = value; RaisePropertyChangedAuto(); } } private String _ipAddress; /// <summary> /// Gets or sets the machine IP address. /// </summary> public String IPAddress { get { return _ipAddress; } set { _ipAddress = value; RaisePropertyChangedAuto(); } } /// <summary> /// Gets a value indicating whether this client requires authentication. /// </summary> public bool RequiresAuthentication => true; #endregion public override Task Connect() { throw new NotImplementedException("External Bridge TCP client must connect through the dedicated connect method."); } /// <summary> /// Connects to a remote external bridge service using the specified login. /// </summary> /// <param name="login">The login.</param> /// <returns></returns> /// <exception cref="AuthenticationException">The machine password is invalid.</exception> public async Task Connect(ExternalBridgeLoginRequest login) { if (State != TransportComponentState.Connected) { try { Adapter = new TcpTransportAdapter(IPAddress, SettingsManager.Default.GetOrCreate<IntegrationSettings>().ExternalBridgeServicePort); await Adapter.Connect(); State = TransportComponentState.Connected; StartThreads(); LogManager.Log("External Bridge TCP Client Connected..."); LogRequestSent(login); var response = await SendRequest<ExternalBridgeLoginRequest, ExternalBridgeLoginResponse>(login); DeviceInformation = response.Message.DeviceInformation; if (!response.Message.Authenticated) { await Adapter.Disconnect(); throw new AuthenticationException("The machine password is invalid."); } Status = MachineStatuses.ReadyToDye; } catch (Exception ex) { LogRequestFailed(login, ex); try { await Adapter.Disconnect(); } catch { } throw ex; } OnEnableDiagnosticsChanged(EnableDiagnostics); OnEnableEmbeddedDebuggingChanged(EnableEmbeddedDebugging); OnEnableEventsNotification(EnableEventsNotification); } } public async override Task Disconnect() { if (State == TransportComponentState.Connected) { ExternalBridgeLogoutRequest request = new ExternalBridgeLogoutRequest(); LogRequestSent(request); try { var response = await SendRequest<ExternalBridgeLogoutRequest, ExternalBridgeLogoutResponse>(request); LogResponseReceived(response.Message); Status = MachineStatuses.Standby; } catch (Exception ex) { LogRequestFailed(request, ex); } } State = TransportComponentState.Disconnected; if (Adapter != null) { await Adapter.Disconnect(); } LogManager.Log("External Bridge TCP client disconnected."); } /// <summary> /// Initializes a new instance of the <see cref="ExternalBridgeTcpClient"/> class. /// </summary> /// <param name="serialNumber">The machine serial number.</param> /// <param name="ipAddress">The machine IP address.</param> public ExternalBridgeTcpClient(String serialNumber, String ipAddress) { SerialNumber = serialNumber; IPAddress = ipAddress; UseKeepAlive = false; EnableDiagnostics = true; } /// <summary> /// Returns a <see cref="System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="System.String" /> that represents this instance. /// </returns> public override string ToString() { return SerialNumber; } /// <summary> /// Called when a new request has been received. /// </summary> /// <param name="request">The request.</param> protected async override void OnRequestReceived(MessageContainer request) { base.OnRequestReceived(request); if (request.Type == MessageType.ExternalBridgeLogoutRequest) { await SendResponse<ExternalBridgeLogoutResponse>(new ExternalBridgeLogoutResponse(), request.Token); try { State = TransportComponentState.Disconnected; if (Adapter != null) { await Adapter.Disconnect(); } LogManager.Log("External Bridge TCP client disconnected by the remote host."); } catch { } SessionClosed?.Invoke(this, new EventArgs()); } } /// <summary> /// Occurs when the remote host has closed the session. /// </summary> public event EventHandler SessionClosed; /// <summary> /// Gets the database machine associated with this client. /// </summary> public Machine Machine { get; private set; } /// <summary> /// Sets the database machine. /// </summary> /// <param name="machine">The machine.</param> public void SetMachine(Machine machine) { Machine = machine; } } }