Ejemplo n.º 1
0
        public CaServerListener(CAServer server, IPEndPoint ipSource)
        {
            this.server   = server;
            this.ipSource = ipSource;

            Rebuild();
        }
Ejemplo n.º 2
0
        internal void PutValue(CAServer server, DataPacket packet)
        {
            var record   = ((ServerTcpReceiver)this.Pipe.FirstFilter).FindRecord(server, packet.Parameter1);
            var property = ((ServerTcpReceiver)this.Pipe.FirstFilter).FindProperty(server, packet.Parameter1);

            record[property] = MapPacketValueToRecordType(packet, record, property);
        }
Ejemplo n.º 3
0
        public string FindProperty(CAServer server, uint sid)
        {
            string channelName = null;

            lock (locker)
            {
                channelName = channelIds.Where(row => row.Value == sid).Select(row => row.Key).First();
            }
            string property = "VAL";

            if (channelName.IndexOf('.') != -1)
            {
                property = channelName.Split('.').Last();
            }
            return(property);
        }
Ejemplo n.º 4
0
        internal object RecordValue(CAServer server, uint sid)
        {
            string channelName = null;

            lock (locker)
            {
                channelName = channelIds.Where(row => row.Value == sid).Select(row => row.Key).First();
            }
            string property = "VAL";

            if (channelName.IndexOf('.') != -1)
            {
                property    = channelName.Split('.').Last();
                channelName = channelName.Split('.').First();
            }

            //Console.WriteLine("Property "+ property);
            return(server.Records[channelName][property]);
        }
Ejemplo n.º 5
0
        internal void UnregisterEvent(CAServer server, uint subscriptionId)
        {
            EpicsEvent oldEvent = null;

            lock (subscribedEvents)
            {
                oldEvent = subscribedEvents[subscriptionId];
            }
            oldEvent.Record.RecordProcessed -= oldEvent.Handler;

            DataPacket response = DataPacket.Create(16);

            response.Command    = (ushort)CommandID.CA_PROTO_EVENT_CANCEL;
            response.DataType   = (ushort)oldEvent.EpicsType;
            response.DataCount  = (uint)oldEvent.DataCount;
            response.Parameter1 = oldEvent.SID;
            response.Parameter2 = (uint)subscriptionId;
            ((TcpReceiver)this.Pipe.FirstFilter).Send(response);
        }
Ejemplo n.º 6
0
        internal void RegisterEvent(CAServer server, uint sid, uint subscriptionId, int nbElements, EpicsType type, MonitorMask mask)
        {
            CARecord record   = ((ServerTcpReceiver)this.Pipe.FirstFilter).FindRecord(server, sid);
            string   property = ((ServerTcpReceiver)this.Pipe.FirstFilter).FindProperty(server, sid);

            DataPacket response = DataPacketBuilder.Encode(type, record[property], record, (nbElements == 0) ? record.ElementsInRecord : Math.Min(nbElements, record.ElementsInRecord));

            response.Command    = (ushort)CommandID.CA_PROTO_EVENT_ADD;
            response.Parameter1 = 1;
            response.Parameter2 = (uint)subscriptionId;
            ((TcpReceiver)this.Pipe.FirstFilter).Send(response);

            var          lastStatus = record.AlarmStatus;
            EventHandler newEvent   = delegate(object obj, EventArgs evt)
            {
                if (!record.IsDirty)
                {
                    return;
                }
                // We have a alarm mask, if the status didn't change, don't send the event
                if (mask == MonitorMask.ALARM && lastStatus == record.AlarmStatus)
                {
                    return;
                }
                lastStatus = record.AlarmStatus;
                DataPacket p = DataPacketBuilder.Encode(type, record[property], record, (nbElements == 0) ? record.ElementsInRecord : Math.Min(nbElements, record.ElementsInRecord));
                p.Command    = (ushort)CommandID.CA_PROTO_EVENT_ADD;
                p.Parameter1 = 1;
                p.Parameter2 = (uint)subscriptionId;
                ((TcpReceiver)this.Pipe.FirstFilter).Send(p);
            };

            record.RecordProcessed += newEvent;

            lock (subscribedEvents)
            {
                subscribedEvents.Add(subscriptionId, new EpicsEvent {
                    Handler = newEvent, Record = record, DataCount = nbElements, EpicsType = type, SID = sid
                });
            }
        }