//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Tango Observables Generator
//
// Changes tousing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Emulations.Emulators;
using Tango.Logging;
using Tango.SharedUI;
using Tango.Core.Commands;
using Tango.Transport.Adapters;
using Tango.Transport.Servers;
using Tango.Transport.Transporters;
using Tango.Core;
using Tango.Settings;
namespace Tango.MachineEM.UI.ViewModels
{
public class MainViewVM : ExtendedObject
{
private TcpServer TcpServer;
private bool _running;
private LogManager logManager = LogManager.Default;
#region Properties
private MachineEmulator _emulator;
/// <summary>
/// Gets or sets the machine emulator.
/// </summary>
public MachineEmulator Emulator
{
get { return _emulator; }
set { _emulator = value; RaisePropertyChanged(nameof(Emulator)); }
}
private String _log;
/// <summary>
/// Gets or sets the log.
/// </summary>
public String Log
{
get { return _log; }
set { _log = value; RaisePropertyChanged(nameof(Log)); }
}
private List<String> _ports;
/// <summary>
/// Gets or sets the ports.
/// </summary>
public List<String> Ports
{
get { return _ports; }
set { _ports = value; RaisePropertyChanged(nameof(Ports)); }
}
private String _selectedPort;
/// <summary>
/// Gets or sets the selected port.
/// </summary>
public String SelectedPort
{
get { return _selectedPort; }
set { _selectedPort = value; RaisePropertyChanged(nameof(SelectedPort)); }
}
#endregion
#region Private Methods
#endregion
#region Commands
/// <summary>
/// Gets or sets the start command.
/// </summary>
public RelayCommand StartCommand { get; set; }
/// <summary>
/// Gets or sets the stop command.
/// </summary>
public RelayCommand StopCommand { get; set; }
/// <summary>
/// Gets or sets the run command.
/// </summary>
public RelayCommand RunCommand { get; set; }
/// <summary>
/// Gets or sets the cancel command.
/// </summary>
public RelayCommand CancelCommand { get; set; }
/// <summary>
/// Gets or sets the clear command.
/// </summary>
public RelayCommand ClearCommand { get; set; }
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="MainViewVM"/> class.
/// </summary>
public MainViewVM()
{
CoreSettings settings = SettingsManager.Default.GetOrCreate<CoreSettings>();
settings.Save();
SimpleStringLogger logger = new SimpleStringLogger(LogCategory.Critical, LogCategory.Error, LogCategory.Info, LogCategory.Warning);
logger.LogReceived += (sedner, log) =>
{
Log += log.ToString() + Environment.NewLine;
};
logManager.RegisterLogger(logger);
logManager.Log("Embedded Emulator Started...");
Emulator = new MachineEmulator(new BasicTransporter());
StartCommand = new RelayCommand(Start, (x) => !Emulator.IsStarted);
StopCommand = new RelayCommand(Stop, (x) => Emulator.IsStarted);
CancelCommand = new RelayCommand(Cancel, (x) => _running);
ClearCommand = new RelayCommand(() => Log = String.Empty);
Ports = new List<string>()
{
"TCP",
"COM1",
"COM2",
"COM3",
"COM4",
"COM5",
"COM6",
"COM7",
"COM8",
"COM9",
};
SelectedPort = Ports.First();
}
#endregion
#region Event Handlers
/// <summary>
/// Handles the ClientConnected event of the TcpServer control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="ClientConnectedEventArgs"/> instance containing the event data.</param>
private void TcpServer_ClientConnected(object sender, ClientConnectedEventArgs e)
{
Emulator.Transporter.Adapter = new TcpTransportAdapter(e.Socket);
}
#endregion
#region Command Handlers
/// <summary>
/// Stops the TCP server and emulator.
/// </summary>
private async void Start()
{
if (SelectedPort == Ports.First())
{
TcpServer = new TcpServer(9999);
TcpServer.ClientConnected += TcpServer_ClientConnected;
TcpServer.Start();
}
else
{
Emulator.Transporter.Adapter = new UsbTransportAdapter(SelectedPort);
}
await Emulator.Start();
InvalidateRelayCommands();
}
/// <summary>
/// Starts the TCP server/USB and emulator.
/// </summary>
private async void Stop()
{
if (TcpServer != null)
{
TcpServer.Stop();
}
await Emulator.Stop();
InvalidateRelayCommands();
}
private void Cancel()
{
}
#endregion
}
}