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);
            }
        }
        public void TestPayload()
        {
            using (var stream = new MemoryStream())
            {
                var source = new ForwardedUnicastData(
                    "host",
                    "user",
                    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);
            }
        }
 public void TestHeartbeat()
 {
     using (var stream = new MemoryStream())
     {
         var source = new ForwardedUnicastData(
             "user",
             "host",
             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);
     }
 }
Ejemplo n.º 4
0
 private void RaiseOnData(ForwardedUnicastData message)
 {
     RaiseOnData(message.User, message.Address, message.Feed, message.Topic, message.Data, message.IsImage);
 }
Ejemplo n.º 5
0
 private void RaiseOnData(ForwardedUnicastData message)
 {
     RaiseOnData(message.User, message.Host, message.Feed, message.Topic, message.DataPackets, message.IsImage);
 }