示例#1
0
        public void ClearWaitResponseTimeoutTimer(Interfaces.IPacket packet)
        {
            if (waitResponseTimeoutTimer == null)
            {
                return;
            }

            waitResponseTimeoutTimer.Enabled = false;
            waitResponseTimeoutTimer.Stop();
            TransporterState = TransporterState.Ready;
        }
示例#2
0
        public SynPacket(Interfaces.IPacket packet, IDataPacketExtractor dataPacketExtractor = null)
        {
            Data    = packet.Data;
            Timeout = packet.Timeout;
            if (dataPacketExtractor == null)
            {
                dataPacketExtractor = new DataPacketExtractor();
            }

            DataPacketExtractor = dataPacketExtractor;

            Initialize();
        }
示例#3
0
        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();
        }
示例#4
0
 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));
     }
 }
示例#5
0
 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);
     }
 }
示例#6
0
        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);
        }