public void TestKnownSizeWithAppend()
        {
            var buffer = new MemoryStream(1000);
            var node1  = NextNodeWith(1);
            var join   = new Join(node1);

            MessageConverters.MessageToBytes(join, buffer);
            buffer.Flip();
            var messageSize = buffer.Length;
            var message     = new RawMessage(messageSize); // known size

            message.Header(RawMessageHeader.From(node1.Id.Value, 0, messageSize));
            message.Append(buffer.ToArray(), 0, messageSize);

            Assert.Equal(node1.Id.Value, message.Header().NodeId);
            Assert.Equal(messageSize, message.Header().Length);
            Assert.Equal(join, OperationalMessage.MessageFrom(message.AsTextMessage()));
        }
Exemplo n.º 2
0
        public void TestFromBytesWithLengthAndRequiredMessageLength()
        {
            var buffer = new MemoryStream(1000);
            var node1  = NextNodeWith(1);
            var join   = new Join(node1);

            MessageConverters.MessageToBytes(join, buffer);
            buffer.Flip();
            var messageSize  = buffer.Length;
            var messageBytes = new byte[messageSize];

            Array.Copy(buffer.ToArray(), 0, messageBytes, 0, messageSize);
            var message = new RawMessage(messageBytes);

            message.Header(RawMessageHeader.From(node1.Id.Value, 0, message.Length));

            Assert.Equal(node1.Id.Value, message.Header().NodeId);
            Assert.Equal(message.Length, message.Header().Length);
            Assert.Equal(message.Length, message.RequiredMessageLength);
            Assert.Equal(join, OperationalMessage.MessageFrom(message.AsTextMessage()));
        }
    public void Send(RawMessage message)
    {
        if (_closed)
        {
            return;
        }

        var length = message.Length;

        if (length <= 0)
        {
            throw new ArgumentException("The message length must be greater than zero.");
        }

        if (length > _maxMessageSize)
        {
            throw new ArgumentException($"The message length is greater than {_maxMessageSize}");
        }

        _logger.Debug($"Multicast publisher reader enqueuing message {message.AsTextMessage()}");
        _messageQueue.Enqueue(message);
    }
Exemplo n.º 4
0
        public void TestCopyBytesTo()
        {
            var buffer = new MemoryStream(1000);
            var text   = "JOIN\nid=1 nm=node1 op=localhost:35745 app=localhost:35746";
            var node1  = Node.With(Id.Of(1), Name.Of("node1"), Host.Of("localhost"), 35745, 35746);
            var bytes  = Converters.TextToBytes(text);

            buffer.Write(bytes, 0, bytes.Length);
            buffer.Flip();
            var messageSize  = buffer.Length;
            var messageBytes = new byte[messageSize];

            Array.Copy(buffer.ToArray(), 0, messageBytes, 0, messageSize);
            var message = new RawMessage(messageBytes);

            message.Header(RawMessageHeader.From(node1.Id.Value, 0, message.Length));
            Assert.Equal(text, message.AsTextMessage());

            buffer.Clear();
            message.CopyBytesTo(buffer); // copyBytesTo
            var convertedText = buffer.ToArray().BytesToText(RawMessageHeader.Bytes, (int)message.Length);

            Assert.Equal(text, convertedText);
        }
    //=========================================
    // InboundStreamInterest (operations and application)
    //=========================================

    public void HandleInboundStreamMessage(AddressType addressType, RawMessage message)
    {
        if (IsStopped)
        {
            return;
        }

        if (addressType.IsOperational)
        {
            var textMessage  = message.AsTextMessage();
            var typedMessage = OperationalMessage.MessageFrom(textMessage);
            if (typedMessage != null)
            {
                if (typedMessage.IsApp)
                {
                    _attributesAgent.HandleInboundStreamMessage(addressType, message);
                }
                else
                {
                    _localLiveNode.Handle(typedMessage);
                }
            }
            else
            {
                Logger.Warn($"ClusterSnapshot received invalid raw message '{textMessage}'");
            }
        }
        else if (addressType.IsApplication)
        {
            _clusterApplication.HandleApplicationMessage(message); // TODO
        }
        else
        {
            Logger.Warn($"ClusterSnapshot couldn't dispatch incoming message; unknown address type: {addressType} for message: {message.AsTextMessage()}");
        }
    }
Exemplo n.º 6
0
 public override void HandleApplicationMessage(RawMessage message, IApplicationOutboundStream?responder) =>
 Logger.Debug($"APP: Received application message: {message.AsTextMessage()}");
Exemplo n.º 7
0
        private Dictionary <string, string> ParsePayload(RawMessage message)
        {
            var map = new Dictionary <string, string>();

            var says = ApplicationSays.From(message.AsTextMessage());

            map.Add(SourceNodeIdKey, says.Id.ValueString());
            map.Add(SourceNodeNameKey, says.Name.Value);

            var parsed = says.Payload.Split('\n');

            map.Add(ClassOfMessageKey, parsed[0]);

            switch (parsed[0])
            {
            case "ConfirmCreateAttributeSet":
                map.Add(CorrelatingMessageIdKey, parsed[1]);
                map.Add(TrackingIdKey, parsed[2]);
                map.Add(MessageTypeKey, parsed[3]);
                map.Add(AttributeSetNameKey, parsed[4]);
                break;

            case "ConfirmRemoveAttributeSet":
                map.Add(CorrelatingMessageIdKey, parsed[1]);
                map.Add(TrackingIdKey, parsed[2]);
                map.Add(MessageTypeKey, parsed[3]);
                map.Add(AttributeSetNameKey, parsed[4]);
                break;

            case "ConfirmAttribute":
                map.Add(CorrelatingMessageIdKey, parsed[1]);
                map.Add(TrackingIdKey, parsed[2]);
                map.Add(MessageTypeKey, parsed[3]);
                map.Add(AttributeSetNameKey, parsed[4]);
                map.Add(AttributeNameKey, parsed[5]);
                break;

            case "CreateAttributeSet":
                map.Add(TrackingIdKey, parsed[1]);
                map.Add(MessageTypeKey, parsed[2]);
                map.Add(AttributeSetNameKey, parsed[3]);
                break;

            case "RemoveAttributeSet":
                map.Add(TrackingIdKey, parsed[1]);
                map.Add(MessageTypeKey, parsed[2]);
                map.Add(AttributeSetNameKey, parsed[3]);
                break;

            case "AddAttribute":
            case "RemoveAttribute":
            case "ReplaceAttribute":
                map.Add(CorrelatingMessageIdKey, parsed[1]);
                map.Add(TrackingIdKey, parsed[2]);
                map.Add(MessageTypeKey, parsed[3]);
                map.Add(AttributeSetNameKey, parsed[4]);
                map.Add(AttributeNameKey, parsed[5]);
                map.Add(AttributeTypeKey, parsed[6]);
                map.Add(AttributeValueKey, parsed[7]);
                break;
            }

            return(map);
        }
Exemplo n.º 8
0
 public void Consume(RawMessage message)
 {
     _messages.Add(message.AsTextMessage());
     _access.WriteUsing("count", 1);
 }
Exemplo n.º 9
0
 public void Consume(RawMessage message)
 {
     _messages.Add(message.AsTextMessage());
     UntilConsume.WriteUsing(_name, 1);
 }
 public override void HandleApplicationMessage(RawMessage message) =>
 Logger.Debug($"APP: Received application message: {message.AsTextMessage()}");
 private void RegisterService()
 {
     if (_directoryChannel != null && _registerService != null)
     {
         var expected = _registerService.TotalLength;
         var actual   = _directoryChannel.Write(_registerService, _buffer);
         if (actual != expected)
         {
             Logger.Warn($"DIRECTORY CLIENT: Did not send full service registration message:  {_registerService.AsTextMessage()}");
         }
     }
 }