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);
        }