private void Device_OnPacketArrival(object sender, CaptureEventArgs e) { var time = e.Packet.Timeval.Date; var len = e.Packet.Data.Length; OpcPacket packet = new OpcPacket().Parse(e.Packet); if (packet != null) { Log.Information("OPC Packet Transfer. ID: {0} Type: {1} Direction: {2}", packet.SecuritySequenceNumber, packet.OpcMessage.ToString(), packet.Direction); if (ResponseToRequest(packet)) { var diff = packet.Time - lastPacket.Time; if (diff > 100000) { return; } OpcConversation conv = new OpcConversation(lastPacket, packet); Prom.UpdateMetrics(conv); } lastPacket = packet; } }
private bool ResponseToRequest(OpcPacket newPacket) { if (lastPacket != null) { // Was the previous packet a request and the new packet a response? if (lastPacket.Direction == Direction.Incoming && newPacket.Direction == Direction.Outgoing) { // Are we sure they have the same ID? if (lastPacket.SecuritySequenceNumber == newPacket.SecuritySequenceNumber) { return(true); } } } return(false); }