Beispiel #1
0
        /// <summary>
        /// Serializes the specified message.
        /// </summary>
        /// <param name="system">The system.</param>
        /// <param name="address">TBD</param>
        /// <param name="message">The message.</param>
        /// <returns>SerializedMessage.</returns>
        public static SerializedMessage Serialize(ActorSystem system, Address address, object message)
        {
            var        objectType = message.GetType();
            Serializer serializer = system.Serialization.FindSerializerForType(objectType);

            var serializedMsg = new SerializedMessage
            {
                Message      = ByteString.CopyFrom(serializer.ToBinaryWithAddress(address, message)),
                SerializerId = serializer.Identifier
            };

            if (serializer is SerializerWithStringManifest serializer2)
            {
                var manifest = serializer2.Manifest(message);
                if (!string.IsNullOrEmpty(manifest))
                {
                    serializedMsg.MessageManifest = ByteString.CopyFromUtf8(manifest);
                }
            }
            else
            {
                if (serializer.IncludeManifest)
                {
                    serializedMsg.MessageManifest = ByteString.CopyFromUtf8(objectType.TypeQualifiedName());
                }
            }

            return(serializedMsg);
        }
Beispiel #2
0
 /// <summary>
 /// Deserializes the specified message.
 /// </summary>
 /// <param name="system">The system.</param>
 /// <param name="messageProtocol">The message protocol.</param>
 /// <returns>System.Object.</returns>
 public static object Deserialize(ActorSystem system, SerializedMessage messageProtocol)
 {
     return(system.Serialization.Deserialize(
                messageProtocol.Message.ToByteArray(),
                messageProtocol.SerializerId,
                !messageProtocol.MessageManifest.IsEmpty ? messageProtocol.MessageManifest.ToStringUtf8() : null));
 }
Beispiel #3
0
 public void Setup(BenchmarkContext context)
 {
     _actorSystem   = ActorSystem.Create("MessageDispatcher" + Counter.GetAndIncrement(), RemoteHocon);
     _systemAddress = RARP.For(_actorSystem).Provider.DefaultAddress;
     _inboundMessageDispatcherCounter = context.GetCounter(MessageDispatcherThroughputCounterName);
     _message = new SerializedMessage {
         SerializerId = 0, Message = ByteString.CopyFromUtf8("foo")
     };
     _dispatcher     = new DefaultMessageDispatcher(_actorSystem.AsInstanceOf <ExtendedActorSystem>(), RARP.For(_actorSystem).Provider, _actorSystem.Log);
     _targetActorRef = new BenchmarkActorRef(_inboundMessageDispatcherCounter, RARP.For(_actorSystem).Provider);
 }
Beispiel #4
0
        /// <summary>
        /// Serializes the specified message.
        /// </summary>
        /// <param name="system">The system.</param>
        /// <param name="address">TBD</param>
        /// <param name="message">The message.</param>
        /// <returns>SerializedMessage.</returns>
        public static SerializedMessage Serialize(ExtendedActorSystem system, Address address, object message)
        {
            var serializer = system.Serialization.FindSerializerFor(message);

            var oldInfo = Akka.Serialization.Serialization.CurrentTransportInformation;

            try
            {
                if (oldInfo == null)
                {
                    Akka.Serialization.Serialization.CurrentTransportInformation =
                        system.Provider.SerializationInformation;
                }

                var serializedMsg = new SerializedMessage
                {
                    Message      = ByteString.CopyFrom(serializer.ToBinary(message)),
                    SerializerId = serializer.Identifier
                };

                if (serializer is SerializerWithStringManifest serializer2)
                {
                    var manifest = serializer2.Manifest(message);
                    if (!string.IsNullOrEmpty(manifest))
                    {
                        serializedMsg.MessageManifest = ByteString.CopyFromUtf8(manifest);
                    }
                }
                else
                {
                    if (serializer.IncludeManifest)
                    {
                        serializedMsg.MessageManifest = ByteString.CopyFromUtf8(message.GetType().TypeQualifiedName());
                    }
                }

                return(serializedMsg);
            }
            finally
            {
                Akka.Serialization.Serialization.CurrentTransportInformation = oldInfo;
            }
        }