public void Serializes_And_Deserializes_Messages()
        {
            var targets = new Address[] { new Address(new byte[] { 10, 20, 127, 54, 51 }), null };
            var type    = "NotARealActionType";
            var payload = new Dictionary <string, object>()
            {
                { "isTest", true },
            };

            var serializedMessage = StrongForceSerialization.SerializeMessage(targets, type, payload);

            var deserializedMessage = StrongForceSerialization.DeserializeMessage(serializedMessage);

            Assert.Equal(targets, deserializedMessage.Item1);
            Assert.Equal(type, deserializedMessage.Item2);
            Assert.Equal(payload, deserializedMessage.Item3);
        }
            public (Address Sender, Address[] Targets, string Type, IDictionary <string, object> Payload) ReadMessage()
            {
                var message = this.ReadFromStream();

                if (message.Action == null)
                {
                    throw new InvalidOperationException("Expected an Action message");
                }

                var sender = new Address(message.Action.Address.ToByteArray());

                var data = message.Action.Data.ToByteArray();

                this.integration.logger.LogTrace("Received message data: " + data.Length + " bytes from " + sender);

                var(targets, messageType, messagePayload) = StrongForceSerialization.DeserializeMessage(data);
                this.integration.logger.LogInformation("Received an action with type: " + messageType);

                return(sender, targets, messageType, messagePayload);
            }