Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagec#
  public interface IDiagnostics
  {
    stringTask<string> GetDiagnosticsGetDiagnosticsAsync();
  }

Next, implement the interface in your device:

Code Block
languagec#
using System;
using System.Threading;
using Connexion.Core;
using System.Threading.Tasks;
namespace ProxySample1
{
  [DevicePlugin("ProxySample1", "Example of device proxying", DeviceDefinitionFlags.None, typeof(object), typeof(object), typeof(ProxySample1Factory))]
  public class ProxySample1 : BaseDevice<ProxySample1Configuration>, IDiagnostics
  {
    public override void Start()
    {
    }
    public override void Stop()
    {
    }
    public override async Task ProcessMessageAsync(IMessageContext context, CancellationToken token)
    {
    }
   
    public stringasync Task<string> GetDiagnosticsGetDiagnosticsAsync()
    {
      return Task.FromResult(Environment.MachineName);
    }
  }
}

Now, create a proxy variable in your viewmodel. Note that if you are calling a proxy method in your viewmodel constructor, we recommend you perform this proxy calls on a different thread so that you do not block the UI thread.

Code Block
languagec#
using Connexion.Core;
using System.Threading.Tasks;
using System.Windows.Input;
namespace ProxySample1
{
  public class ProxySample1UIViewModel : ViewModelBase
  {
    private ProxySample1Configuration m_Config;
    private IDeviceUIParams m_DeviceUIParams;
    private IDiagnostics m_Proxy;
    public ProxySample1UIViewModel(ProxySample1Configuration config, IDeviceUIParams deviceUIParams)
    {
      m_Config = config;
      m_DeviceUIParams = deviceUIParams;
      m_Proxy = deviceUIParams.GetServerDeviceProxy<IDiagnostics>(); // <-- creation of the proxy
    }
    public ProxySample1Configuration Configuration
    {
      get { return m_Config; }
    }
    private RelayCommand m_GetDiagnosticsCommand;
    public ICommand GetDiagnosticsCommand
    {
      get { return m_GetDiagnosticsCommand ?? (m_GetDiagnosticsCommand = new RelayCommand(async p => await GetDiagnostics())); }
    }
    private async Task GetDiagnostics()
    {
      await Task.Run(() =>
      {
        DiagnosticResult =		try
		{
			DiagnosticResult = await m_Proxy.GetDiagnosticsGetDiagnosticsAsync();	// <-- Calling the server
		}
		catch(exception ex)
		{
			DiagnosticResult = ex.Message;
		});
    }    
    private string m_DiagnosticResult = "Click to run the diagnostics";
    public string DiagnosticResult
    {
      get { return m_DiagnosticResult; }
      set
      {
        if(m_DiagnosticResult != value)
        {
          m_DiagnosticResult = value;
          RaisePropertyChanged();
        }
      }
    }
  }
}

...