#region Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved //----------------------------------------------------------------------------- // Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved // Web: https://www.technosoftware.com // // The source code in this file is covered under a dual-license scenario: // - Owner of a purchased license: SCLA 1.0 // - GPL V3: everybody else // // SCLA license terms accompanied with this source code. // See SCLA 1.0: https://technosoftware.com/license/Source_Code_License_Agreement.pdf // // GNU General Public License as published by the Free Software Foundation; // version 3 of the License are accompanied with this source code. // See https://technosoftware.com/license/GPLv3License.txt // // This source code is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. //----------------------------------------------------------------------------- #endregion Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved #region Using Directives using System; using System.Text; #endregion namespace Technosoftware.DaAeHdaClient { /// /// A unique item identifier. /// [Serializable] public class OpcItem : ICloneable { #region Constructors, Destructor, Initialization /// /// Initializes the object with default values. /// public OpcItem() { } /// /// Initializes the object with the specified item name. /// public OpcItem(string itemName) { ItemPath = null; ItemName = itemName; } /// /// Initializes the object with the specified item path and item name. /// public OpcItem(string itemPath, string itemName) { ItemPath = itemPath; ItemName = itemName; } /// /// Initializes the object with the specified item identifier. /// public OpcItem(OpcItem itemId) { if (itemId != null) { ItemPath = itemId.ItemPath; ItemName = itemId.ItemName; ClientHandle = itemId.ClientHandle; ServerHandle = itemId.ServerHandle; } } #endregion #region Properties /// /// The primary identifier for an item within the server namespace. /// public string ItemName { get; set; } /// /// An secondary identifier for an item within the server namespace. /// public string ItemPath { get; set; } /// /// A unique item identifier assigned by the client. /// public object ClientHandle { get; set; } /// /// A unique item identifier assigned by the server. /// public object ServerHandle { get; set; } /// /// Create a string that can be used as index in a hash table for the item. /// public string Key => new StringBuilder(64) .Append(ItemName ?? "null") .Append(Environment.NewLine) .Append(ItemPath ?? "null") .ToString(); #endregion #region ICloneable Members /// /// Creates a shallow copy of the object. /// public virtual object Clone() { return MemberwiseClone(); } #endregion } }