コード例 #1
0
ファイル: FNTGZ60.cs プロジェクト: Mokarski/Vagonka
        /// <summary>
        /// Частота в сотых Гц (0.01 Гц). Защита в диапазоне 100..9900
        /// </summary>
        /// <param name="value"></param>
        public void Frequency(ushort value)
        {
            // TODO: ОЧЕНЬ ВАЖНО!!!! частота должна выставляться ВСЕГДА уникастово, а старт-стоп в режиме движения - бродкастово

            // [04.04.2014 17:33:48] Преймачук Юрий: Привет! Необходимо обеспечить 4 скорости движения вагона №10 (3 км/ч, 6 км/ч, 9 км/ч, 12 км/ч), что соответствует частотам ПЧН:
            //        3 км/ч - 25 Гц;
            //        6 км/ч - 50 Гц;
            //        9 км/ч - 75 Гц;
            //        12 км/ч - 100 Гц.

            value = CorrectFrequencyRange(value);

            if (mFrequencySettings != value)
            {
                mFrequencySettings = value;
                mJournal.Debug(string.Format("{0}: уст. частота: {1}", Id, mFrequencySettings), MessageLevel.System);

                //mOutputData[1] = mFrequencySettings;
                //WriteUpdate(isBroadcast ? (byte)0 : mModbusId, 1, new[] { mFrequencySettings });
                //if (isBroadcast)
                //    BroadcastData.UpdateData(1, mFrequencySettings);
                //else
                UnicastData.UpdateData(1, mFrequencySettings);
            }
        }
コード例 #2
0
ファイル: FNTGZ60.cs プロジェクト: Mokarski/Vagonka
        public void WriteConveyorState()
        {
            if (!UnicastData.HasUpdate)
            {
                return;
            }

            // TODO: данные на включение-выключение должна совпадать с броадкаст для режима движения
            WriteUpdate(mModbusId, 0, UnicastData.GetData());
        }
コード例 #3
0
ファイル: FNTGZ60.cs プロジェクト: Mokarski/Vagonka
 public void Direction(bool forward)
 {
     // TODO: ОЧЕНЬ ВАЖНО!!!! Направление должно выставляться ВСЕГДА уникастово, а старт-стоп в режиме движения - бродкастово
     if (Status == EngineStatus.Stopped)
     {
         //mOutputData[2] = (ushort)(forward ? 0 : 1);
         //WriteUpdate(mModbusId, 2, new[] { (ushort)(forward ? 0 : 1) });
         UnicastData.UpdateData(2, (ushort)(forward ? 0 : 1));
     }
 }
コード例 #4
0
        public void SendUnicastData(Interactor publisher, UnicastData unicastData)
        {
            // Can we find this client in the subscribers to this topic?
            var subscriber = _repository.GetSubscribersToFeedAndTopic(unicastData.Feed, unicastData.Topic)
                             .FirstOrDefault(x => x.Key.Id == unicastData.ClientId);

            if (subscriber.Key == null)
            {
                return;
            }

            _publisherManager.SendUnicastData(publisher, subscriber.Key, subscriber.Value, unicastData);
        }
コード例 #5
0
ファイル: FNTGZ60.cs プロジェクト: Mokarski/Vagonka
        public void WriteState()
        {
            if (!UnicastData.HasUpdate)
            {
                return;
            }

            // TODO: данные на включение-выключение должна совпадать с броадкаст для режима движения
            var req = UnicastData.GetData();

            //WriteUpdate(mModbusId, 0, UnicastData.GetData());
            WriteUpdate(mModbusId, 1, new[] { req[1], req[2] });
        }
コード例 #6
0
 public void TestNoPayload()
 {
     using (var stream = new MemoryStream())
     {
         var source = new UnicastData(
             Guid.NewGuid(),
             "__admin__",
             "heartbeat",
             true,
             null);
         source.Write(new DataWriter(stream));
         stream.Seek(0, SeekOrigin.Begin);
         var dest = Message.Read(new DataReader(stream));
         Assert.AreEqual(source, dest);
     }
 }
コード例 #7
0
 public void TestPayload()
 {
     using (var stream = new MemoryStream())
     {
         var source = new UnicastData(
             Guid.NewGuid(),
             "__admin__",
             "heartbeat",
             true,
             new DataPacket[]
         {
             new DataPacket(
                 new HashSet <int> {
                 1
             },
                 new byte[] { 1, 2, 3, 4, 5, 6 })
         });
         source.Write(new DataWriter(stream));
         stream.Seek(0, SeekOrigin.Begin);
         var dest = Message.Read(new DataReader(stream));
         Assert.AreEqual(source, dest);
     }
 }
コード例 #8
0
 public void SendUnicastData(IInteractor publisher, UnicastData unicastData, IInteractor subscriber)
 {
     _repository.AddPublisher(publisher, unicastData.Feed, unicastData.Topic);
     subscriber.SendMessage(unicastData);
 }
コード例 #9
0
 private void RaiseOnData(UnicastData message)
 {
     RaiseOnData(message.Feed, message.Topic, message.Data, message.IsImage);
 }
コード例 #10
0
        public void SendUnicastData(Interactor publisher, Interactor subscriber, AuthorizationInfo authorization, UnicastData unicastData)
        {
            if (!publisher.HasRole(unicastData.Feed, Role.Publish))
            {
                _logger.LogWarning("Rejected request from {Publisher} to publish on feed {Feed}", publisher, unicastData.Feed);
                return;
            }

            publisher.Metrics.UnicastMessages[unicastData.Feed].Inc();

            var clientUnicastData = new ForwardedUnicastData(
                publisher.UserForFeed(unicastData.Feed),
                publisher.HostForFeed(unicastData.Feed),
                unicastData.ClientId,
                unicastData.Feed,
                unicastData.Topic,
                unicastData.IsImage,
                GetAuthorizedData(unicastData.DataPackets, authorization));

            _logger.LogDebug("Sending unicast data from {Publisher} to {Subscriber}: {Message}", publisher, subscriber, clientUnicastData);

            _repository.AddPublisher(publisher, unicastData.Feed, unicastData.Topic);

            try
            {
                subscriber.SendMessage(clientUnicastData);
            }
            catch (Exception error)
            {
                _logger.LogDebug(error, "Failed to send to subscriber {Subscriber} unicast data {Message}", subscriber, clientUnicastData);
            }
        }
コード例 #11
0
        public void SendUnicastData(IInteractor publisher, IInteractor subscriber, AuthorizationInfo authorization, UnicastData unicastData)
        {
            if (!publisher.HasRole(unicastData.Feed, Role.Publish))
            {
                Log.Warn($"Rejected request from {publisher} to publish on feed {unicastData.Feed}");
                return;
            }

            var clientUnicastData =
                authorization.IsAuthorizationRequired
                    ? new ForwardedUnicastData(publisher.User, publisher.Address, unicastData.ClientId, unicastData.Feed, unicastData.Topic, unicastData.IsImage, unicastData.Data.Where(x => authorization.Entitlements.Contains(x.Header)).ToArray())
                    : new ForwardedUnicastData(publisher.User, publisher.Address, unicastData.ClientId, unicastData.Feed, unicastData.Topic, unicastData.IsImage, unicastData.Data);

            Log.Debug($"Sending unicast data from {publisher} to {subscriber}: {clientUnicastData}");

            _repository.AddPublisher(publisher, clientUnicastData.Feed, clientUnicastData.Topic);

            try
            {
                subscriber.SendMessage(clientUnicastData);
            }
            catch (Exception exception)
            {
                Log.Debug($"Failed to send to subscriber {subscriber} unicast data {clientUnicastData}", exception);
            }
        }