public CASubArrayRecord <TArrayElement> CreateSubArrayRecord <TArrayElement>(string name, CAArrayRecord <TArrayElement> arrayRecord) where TArrayElement : IComparable
        {
            var result = new CASubArrayRecord <TArrayElement>(arrayRecord.Value)
            {
                Name = name,
            };

            records.Add(result);
            return(result);
        }
Пример #2
0
        public void Initialize()
        {
            Server = new CAServer(IPAddress.Parse("127.0.0.1"));
            Client = new CAClient();
            Client.Configuration.SearchAddress = "127.0.0.1";
            Client.Configuration.WaitTimeout   = TIMEOUT;

            var  countChange = new AutoResetEvent(false);
            long count       = 3;

            IntArrayRecord    = Server.CreateArrayRecord <CAIntArrayRecord>(IntArrayChannelName, 20);
            IntSubArrayRecord = Server.CreateSubArrayRecord(IntSubArrayChannelName, IntArrayRecord);
            for (var i = 0; i < IntArrayRecord.Value.Length; i++)
            {
                IntArrayRecord.Value[i] = i;
            }

            FloatSubArrayRecord = Server.CreateSubArrayRecord <CAFloatSubArrayRecord>(FloatSubArrayChannelName, 10);
            for (byte i = 0; i < FloatSubArrayRecord.FullArray.Length; i++)
            {
                FloatSubArrayRecord.FullArray[i] = i;
            }

            ByteSubArrayRecord = Server.CreateSubArrayRecord <CAByteSubArrayRecord>(ByteSubArrayChannelName, 35);
            var str   = "Hello world";
            var bytes = Encoding.ASCII.GetBytes(str);

            for (byte i = 0; i < bytes.Length; i++)
            {
                ByteSubArrayRecord.FullArray[i] = bytes[i];
            }
            ByteSubArrayRecord.Scan = Constants.ScanAlgorithm.HZ10;

            void ProcessedHandler(object obj, EventArgs args)
            {
                Interlocked.Decrement(ref count);
                countChange.Set();
            };

            IntArrayRecord.RecordProcessed      += ProcessedHandler;
            FloatSubArrayRecord.RecordProcessed += ProcessedHandler;
            ByteSubArrayRecord.RecordProcessed  += ProcessedHandler;

            while (Interlocked.Read(ref count) > 0)
            {
                if (!countChange.WaitOne(TIMEOUT))
                {
                    Server.Dispose();
                    throw new Exception("Timed out");
                }
            }
            Server.Start();
        }