public async Task StartAsync(Meter meter, DataSet dataSet, MeterSessionSetting sessionSetting)
        {
            CurrentMeterSession = new MeterSession(meter, dataSet)
            {
                Guid           = Guid.NewGuid(),
                SessionSetting = sessionSetting ?? throw new ArgumentNullException(nameof(sessionSetting)),
                                       StartDate = DateTime.UtcNow
            };

            sessionTracer.Clear();

            if (sessionSetting.CommunicationChannelSetting != null)
            {
                if ((sessionSetting.CommunicationChannelSetting.BaudRate != BaudRate.BaudRate_9600) ||
                    (sessionSetting.CommunicationChannelSetting.NumberOfPackets != ((sessionSetting is InsituMeterSessionSetting) ? InsituSession.DefaultNumberOfPackets : RemoteSession.DefaultNumberOfPackets)) ||
                    (sessionSetting.CommunicationChannelSetting.PacketSize != (PacketSize)((sessionSetting is InsituMeterSessionSetting) ? InsituSession.DefaultPacketSize : RemoteSession.DefaultPacketSize)))
                {
                    negotiationSetting = new NegotiationSetting()
                    {
                        BaudRate         = (BaudRateValue)sessionSetting.CommunicationChannelSetting.BaudRate,
                        BaudRateSelector = BaudRateSelector.OneBaudRateRequested,
                        NumberOfPackets  = sessionSetting.CommunicationChannelSetting.NumberOfPackets,
                        PacketSize       = (short)sessionSetting.CommunicationChannelSetting.PacketSize
                    };
                }

                if ((sessionSetting.CommunicationChannelSetting.ChannelTrafficTimeout != ((sessionSetting is InsituMeterSessionSetting) ? InsituSession.DefaultChannelTrafficTimeout : RemoteSession.DefaultChannelTrafficTimeout)) ||
                    (sessionSetting.CommunicationChannelSetting.InterCharacterTimeout != ((sessionSetting is InsituMeterSessionSetting) ? InsituSession.DefaultInterCharacterTimeout : RemoteSession.DefaultInterCharacterTimeout)) ||
                    (sessionSetting.CommunicationChannelSetting.ResponseTimeout != ((sessionSetting is InsituMeterSessionSetting) ? InsituSession.DefaultResponseTimeout : RemoteSession.DefaultResponseTimeout)) ||
                    (sessionSetting.CommunicationChannelSetting.NumberOfRetries != ((sessionSetting is InsituMeterSessionSetting) ? InsituSession.DefaultRetryAttempts : RemoteSession.DefaultRetryAttempts)))
                {
                    timingSetting = new TimingSetting()
                    {
                        ChannelTrafficTimeout = sessionSetting.CommunicationChannelSetting.ChannelTrafficTimeout,
                        InterCharacterTimeout = sessionSetting.CommunicationChannelSetting.InterCharacterTimeout,
                        ResponseTimeout       = sessionSetting.CommunicationChannelSetting.ResponseTimeout,
                        NumberOfRetries       = sessionSetting.CommunicationChannelSetting.NumberOfRetries
                    };
                }

                reconnectionCountdownTimer = (sessionSetting.ReconnectionSchema != null) ? new Timer(OnReconnectionCountDown, null, -1, -1) : null;
                totalBytesReceived         = 0; totalBytesSent = 0;
            }

            ansiProtocolSession = CreateProtocolSession();
            await ansiProtocolSession.StartAsync();
        }
Example #2
0
        public InsituSession(string portName, int userId, string userName, string password, int?sendAckResponseThershold, int?baudRate, bool?dtrEnabled, int?receivedBytesThershold, NegotiationSetting negotiationSetting = null, TimingSetting timingSetting = null)
            : base(userId, userName, password, sendAckResponseThershold, receivedBytesThershold, negotiationSetting, timingSetting)
        {
            PortName   = portName;
            BaudRate   = baudRate;
            DtrEnabled = dtrEnabled;

            serialDataReceivedEventHandler  = new SerialDataReceivedEventHandler(OnSerialDataReceived);
            serialErrorReceivedEventHandler = new SerialErrorReceivedEventHandler(OnSerialErrorReceived);
            serialPinChangedEventHandler    = new SerialPinChangedEventHandler(OnSerialPinChanged);
        }
Example #3
0
        protected override int DefaultCommunicationTimeout => 30000; // El Protocolo ANSI 12.21 define 30 segundos como tiempo máximo de espera en el canal de comunicación durante un lectura por su puerto RS232
        #endregion

        #region Constructor
        public RemoteSession(string ip, int portNumber, int userId, string userName, string password, int?sendAckResponseThershold, int?startRemoteSessionAttempts, NegotiationSetting negotiationSetting = null, TimingSetting timingSetting = null, bool useMeterMaxProtocol = true)
            : base(userId, userName, password, sendAckResponseThershold, null, negotiationSetting, timingSetting)
        {
            _endPoint = new IPEndPoint(IPAddress.Parse(ip), portNumber);
            _startRemoteSessionAttempts = startRemoteSessionAttempts ?? DefaultStartRemoteSessionAttempts;
            _useMeterMaxProtocol        = useMeterMaxProtocol;
        }
Example #4
0
        protected SessionBase(int userId, string userName, string password, int?sendAckResponseThershold, int?receivedBytesThershold, NegotiationSetting negotiationSetting = null, TimingSetting timingSetting = null)
        {
            if (string.IsNullOrEmpty(userName))
            {
                throw new ArgumentNullException("El nombre de usuario no puede ser una cadena vacía o nula.");
            }

            if (string.IsNullOrEmpty(password))
            {
                throw new ArgumentNullException("La contraseña de autenticación requerida no puede ser una cadena nula o vacía.");
            }

            _password = password;

            CommunicationTimeout   = DefaultCommunicationTimeout;
            AckResponseThreshold   = sendAckResponseThershold ?? DefaultSendAckResponseThreshold;
            ReceivedBytesThreshold = receivedBytesThershold;

            _serviceExecutionStopwatch = new Stopwatch();
            SessionStatus = SessionStatus.Closed;

            Phase          = SessionPhase.Idle;
            HandshakeState = HandshakeState.Identification;
            dataLinkPacket = new DataLinkPacket();

            Services = new List <IService>();
            identificationService = new IdentificationService();
            logonService          = new LogonService(userId, userName);

            if (negotiationSetting != null)
            {
                negotiateService = new NegotiateService(negotiationSetting);
            }
            if (timingSetting != null)
            {
                timingSetupService = new TimingSetupService(timingSetting);
            }
        }