public CaServerListener(CAServer server, IPEndPoint ipSource) { this.server = server; this.ipSource = ipSource; Rebuild(); }
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); }
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); }
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]); }
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); }
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 }); } }