public void ClearWaitResponseTimeoutTimer(Interfaces.IPacket packet) { if (waitResponseTimeoutTimer == null) { return; } waitResponseTimeoutTimer.Enabled = false; waitResponseTimeoutTimer.Stop(); TransporterState = TransporterState.Ready; }
public SynPacket(Interfaces.IPacket packet, IDataPacketExtractor dataPacketExtractor = null) { Data = packet.Data; Timeout = packet.Timeout; if (dataPacketExtractor == null) { dataPacketExtractor = new DataPacketExtractor(); } DataPacketExtractor = dataPacketExtractor; Initialize(); }
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 Dispatcher_DataReceivedEvent(object sender, Interfaces.IPacket packet) { if (currentTransportPacket.IsGuaranteedCommand && currentTransportPacket.IsExpectedResponse(packet.Data)) { packetQueue.TryDequeue(out var onePacket); guaranteedCmdRetry = 0; transporter.ClearWaitResponseTimeoutTimer(packet); TransportDataReceived?.Invoke(this, new SynPacket(packet, currentTransportPacket.DataPacketExtractor)); } else { TransportDataReceived?.Invoke(this, new SynPacket(packet, null)); } }
protected virtual void Dispatcher_TransportDataTimeout(object sender, Interfaces.IPacket packet) { if (guaranteedCmdRetry > 0) { if (TransportDispatcherState == TransporterState.Ready) { transporter.Send(currentTransportPacket); } } else { packetQueue.TryDequeue(out var onePacket); transporter.ClearWaitResponseTimeoutTimer(packet); TransportDataTimeout?.Invoke(this, currentTransportPacket); } }
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); }