You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
2.8 KiB
C#

namespace OPCDA.NET
{
using System;
using System.Collections;
using System.Threading;
internal class ItemCollection : CollectionBase
{
private Mutex mtx = new Mutex();
internal void Add(ItemDef gItem)
{
this.Lock();
base.List.Add(gItem);
this.Unlock();
}
internal bool Contains(string name)
{
this.Lock();
IEnumerator enumerator = base.List.GetEnumerator();
while (enumerator.MoveNext())
{
ItemDef current = (ItemDef) enumerator.Current;
if (name == current.OpcIDef.ItemID)
{
this.Unlock();
return true;
}
}
this.Unlock();
return false;
}
public ItemDef FindClientHandle(int Hnd)
{
this.Lock();
IEnumerator enumerator = base.List.GetEnumerator();
while (enumerator.MoveNext())
{
ItemDef current = (ItemDef) enumerator.Current;
if (Hnd == current.OpcIDef.HandleClient)
{
this.Unlock();
return current;
}
}
this.Unlock();
return null;
}
internal int IndexOf(string name)
{
this.Lock();
for (int i = 0; i < base.List.Count; i++)
{
if (base.List[i] != null)
{
ItemDef def = (ItemDef) base.List[i];
if (name == def.OpcIDef.ItemID)
{
this.Unlock();
return i;
}
}
}
this.Unlock();
return -1;
}
internal ItemDef Item(int Index)
{
this.Lock();
ItemDef def = (ItemDef) base.List[Index];
this.Unlock();
return def;
}
public ItemDef Item(string name)
{
this.Lock();
IEnumerator enumerator = base.List.GetEnumerator();
while (enumerator.MoveNext())
{
ItemDef current = (ItemDef) enumerator.Current;
if (name == current.OpcIDef.ItemID)
{
this.Unlock();
return current;
}
}
this.Unlock();
return null;
}
private void Lock()
{
this.mtx.WaitOne();
}
internal void Remove(ItemDef gItem)
{
this.Lock();
base.List.Remove(gItem);
this.Unlock();
}
private void Unlock()
{
this.mtx.ReleaseMutex();
}
}
}