예제 #1
0
        /// <summary>
        /// Read data from the reliable channel
        /// </summary>
        public void ReliableRead(StreamMessageChannel messageChannel)
        {
            /*
             * if (log.IsInfoEnabled)
             *  log.Info("On " + System.Reflection.MethodBase.GetCurrentMethod());
             */

            try
            {
                lock (messageChannel.SyncObject)
                {
                    object tmp = BaseInteractionMessage.NullBaseInteractionMessage;
                    object msg = serializer.Deserialize(messageChannel.InputStream, ref tmp);
                    if (msg is BaseInteractionMessage)
                    {
                        ReceiveInteraction(msg as BaseInteractionMessage);
                    }
                }
            }
            catch (System.Exception e)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(" Exception on ReliableRead: " + e.Message);
                }
                //throw new RTIinternalError(e.Message);
            }
        }
예제 #2
0
        ///<summary>
        /// Reads and returns a BaseIteractionMessage from the specified stream.
        ///</summary>
        ///<param name="reader"> the input stream to read from</param>
        ///<returns> the decoded parameterValue</returns>
        ///<exception cref="System.IO.IOException"> if an error occurs</exception>
        public override object Deserialize(HlaEncodingReader reader, ref object msg)
        {
            if (msg == null)
            {
                msg = new BaseInteractionMessage();
            }
            BaseInteractionMessage decodedValue = msg as BaseInteractionMessage;

            decodedValue.FederateHandle            = reader.ReadHLAinteger64BE();
            decodedValue.InteractionIndex          = reader.ReadHLAinteger64BE();
            decodedValue.FederationExecutionHandle = reader.ReadHLAinteger64BE();
            decodedValue.UserSuppliedTag           = reader.ReadHLAopaqueData();
            decodedValue.InteractionClassHandle    = reader.ReadHLAinteger64BE();

            IHlaEncodingSerializer serializer = serializerManager.GetSerializer(decodedValue.InteractionClassHandle);

            if (serializer != null && !this.Equals(serializer))
            {
                object decodedValueTmp = decodedValue;
                return(serializer.Deserialize(reader, ref decodedValueTmp));
            }
            else
            {
                return(decodedValue);
            }
        }
예제 #3
0
 /// <summary>
 /// Reads and returns a HLAparameterHandleValuePair from the specified stream.
 /// </summary>
 /// <param name="reader"> the input stream to read from</param>
 /// <returns> the decoded parameterValue</returns>
 /// <exception cref="IOException"> if an error occurs</exception>
 public override object Deserialize(HlaEncodingReader reader, ref object msg)
 {
     if (reader.ReadHLAinteger32BE() == MAGIC_NUMBER && reader.ReadHLAinteger32BE() == hlaEncodingModelVersion)
     {
         return(baseSerializer.Deserialize(reader, ref msg));
     }
     else
     {
         throw new IOException("Wrong message format. Unexpected magic number or version");
     }
 }
        ///<summary>
        /// Reads and returns a HLAfederate.HLAGALT from the specified stream.
        ///</summary>
        ///<param name="reader"> the input stream to read from</param>
        ///<param name="dummy"> this parameter is not used</param>
        ///<returns> the decoded value</returns>
        ///<exception cref="System.IO.IOException"> if an error occurs</exception>
        public override object Deserialize(HlaEncodingReader reader, ref object dummy)
        {
            ILogicalTime decodedValue;

            try
            {
                IHlaEncodingSerializer serializer = serializerManager.GetSerializer(typeof(ILogicalTime));
                decodedValue = (ILogicalTime)serializer.Deserialize(reader, ref dummy);
                return(decodedValue);
            }
            catch (IOException ioe)
            {
                throw new FederateInternalError(ioe.ToString());
            }
        }
        ///<summary> Reads this HLAupdateAttributeValuesMessage from the specified stream.</summary>
        ///<param name="reader"> the input stream to read from</param>
        ///<returns> the object</returns>
        ///<exception cref="System.IO.IOException"> if an error occurs</exception>
        public override object Deserialize(HlaEncodingReader reader, ref object msg)
        {
            HLAupdateAttributeValuesMessage decodedValue;

            if (!(msg is HLAupdateAttributeValuesMessage))
            {
                decodedValue = new HLAupdateAttributeValuesMessage();
                BaseInteractionMessage baseMsg = msg as BaseInteractionMessage;
                decodedValue.CopyTo(baseMsg);
                //decodedValue.InteractionClassHandle = baseMsg.InteractionClassHandle;
                //decodedValue.FederationExecutionHandle = baseMsg.FederationExecutionHandle;
                //decodedValue.UserSuppliedTag = baseMsg.UserSuppliedTag;
            }
            else
            {
                decodedValue = msg as HLAupdateAttributeValuesMessage;
            }
            object tmp = decodedValue;

            try
            {
                decodedValue = base.Deserialize(reader, ref tmp) as HLAupdateAttributeValuesMessage;

                decodedValue.ObjectInstanceHandle         = reader.ReadHLAinteger64BE();
                decodedValue.AttributeHandleValuePairList = new HLAattributeHandleValuePair[reader.ReadHLAinteger32BE()];

                for (int i = 0; i < decodedValue.AttributeHandleValuePairList.Length; i++)
                {
                    tmp = BaseInteractionMessage.NullBaseInteractionMessage;
                    decodedValue.AttributeHandleValuePairList[i] = (HLAattributeHandleValuePair)hlaAttributeHandleValuePairXrtiSerializer.Deserialize(reader, ref tmp);
                }
            }
            catch (System.IO.IOException ioe)
            {
                throw new RTIinternalError(ioe.ToString());
            }
            return(decodedValue);
        }