using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ORiN2.ManagedCAO; namespace IoTDSProviderSample { public partial class FrmMain : Form { private class ListItem { public string Name { get { return Variable.Name; } } public CCaoVariable Variable { get; private set; } public ListItem(CCaoVariable variable) { Variable = variable; } } private CCaoEngine _engine; private CCaoController _controller = null; private readonly BindingList _dataSource = new BindingList(); private bool Connected { get { return _controller != null; } } public FrmMain() { InitializeComponent(); _engine = new CCaoEngine(); lstVariables.DisplayMember = "Name"; lstVariables.ValueMember = "Variable"; lstVariables.DataSource = _dataSource; UpdateControllerStatus(); } private void UpdateControllerStatus() { txtControllerName.Enabled = !Connected; txtServer.Enabled = !Connected; nudTimeout.Enabled = !Connected; btnAddController.Text = Connected ? "Remove controller" : "AddController"; grpVariables.Enabled = Connected; pnlVariableProperties.Enabled = Connected && lstVariables.SelectedValue != null; } private void HandleException(Exception ex) { MessageBox.Show(this, ex.ToString(), Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } private CCaoVariable SelectedVariable { get { return lstVariables.SelectedValue as CCaoVariable; } } private void btnAddController_Click(object sender, EventArgs e) { try { if (Connected) { _engine.Workspaces[0].Controllers.Remove(_controller.Index); _controller = null; _dataSource.Clear(); } else { if (string.IsNullOrEmpty(txtControllerName.Text)) { throw new ArgumentException("Controller name is required."); } List options = new List(); if (!string.IsNullOrEmpty(txtServer.Text)) { options.Add(string.Format("Server={0}", txtServer.Text)); } options.Add(string.Format("Timeout={0}", nudTimeout.Value)); string option = string.Join(",", options); _controller = _engine.Workspaces[0].AddController( txtControllerName.Text, "CaoProv.DENSO.IoTDS", null, option); } } catch (Exception ex) { HandleException(ex); } UpdateControllerStatus(); } private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) { if (_engine != null) { _engine.Dispose(); _engine = null; } } private void lstVariables_SelectedIndexChanged(object sender, EventArgs e) { UpdateControllerStatus(); } private void btnGetValue_Click(object sender, EventArgs e) { try { var variable = lstVariables.SelectedValue as CCaoVariable; if (variable == null) { return; } ctlValueValue.Value = variable.Value; } catch (Exception ex) { HandleException(ex); } } private void btnPutValue_Click(object sender, EventArgs e) { try { var variable = lstVariables.SelectedValue as CCaoVariable; if (variable == null) { return; } variable.Value = ctlValueValue.Value; } catch (Exception ex) { HandleException(ex); } } private void btnAddVariable_Click(object sender, EventArgs e) { try { if (_controller == null) { return; } var variable = _controller.AddVariable(txtVariableName.Text, null); _dataSource.Add(new ListItem(variable)); } catch (Exception ex) { HandleException(ex); } UpdateControllerStatus(); } } }