public void ClearWaitResponseTimeoutTimer(Interfaces.IPacket packet) { if (waitResponseTimeoutTimer == null) { return; } waitResponseTimeoutTimer.Enabled = false; waitResponseTimeoutTimer.Stop(); TransporterState = TransporterState.Ready; }
private void SetWaitResponseTimeoutTimer(Interfaces.IPacket packet) { if (waitResponseTimeoutTimer == null) { waitResponseTimeoutTimer = new Timer(packet.Timeout); waitResponseTimeoutTimer.Elapsed += ResponseTimeoutElapsed; } TransporterState = TransporterState.WaitingResponse; waitResponseTimeoutTimer.Interval = packet.Timeout; waitResponseTimeoutTimer.Enabled = true; waitResponseTimeoutTimer.Start(); }
protected virtual void Transporter_DataReceivedEvent(object sender, byte[] bytesReceived) { if (lastSentPacket.Timeout > 0 && TransporterState == TransporterState.WaitingResponse) { if (lastSentPacket.IsExpectedResponse(bytesReceived)) { TransporterState = TransporterState.Ready; ClearWaitResponseTimeoutTimer(null); } } TransportDataReceived?.Invoke(this, new Packet() { Data = bytesReceived }); }
public bool Send(Interfaces.IPacket packet) { if (packet.Data == null || TransporterState != TransporterState.Ready) { return(false); } TransporterState = TransporterState.TransferingData; var ret = transport.Write(packet.Data); lastSentPacket = packet; if (ret && lastSentPacket.Timeout > 0) { SetWaitResponseTimeoutTimer(lastSentPacket); } else { TransporterState = TransporterState.Ready; } return(ret); }