Ejemplo n.º 1
0
        /// <summary>
        /// Override.
        /// </summary>
        protected void SendResponding(TransportInfo inputMessageTransportInfo,
                                      TransportMessage message)
        {
            List <ArbiterClientId?> forwardingInfo = inputMessageTransportInfo.CreateRespondingClientList();

            DoSendAndReceiveForwarding(forwardingInfo, message, DefaultTimeOut, null);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Will unsubscribe to previous one.
        /// </summary>
        protected bool SetRemoteStatusSynchronizationSource(TransportInfo sourceTransportInfo)
        {
            lock (this)
            {
                if (_remoteStatusSynchronizationSource != null)
                {
                    SubscribeToOperationalStateChangesMessage message = new SubscribeToOperationalStateChangesMessage(false);
                    message.RequestResponse = false;
                    SendResponding(_remoteStatusSynchronizationSource, message);
                }

                _remoteStatusSynchronizationSource = sourceTransportInfo;
            }

            bool result = true;

            if (sourceTransportInfo != null)
            {
                ResponseMessage response = SendAndReceiveResponding <ResponseMessage>(sourceTransportInfo,
                                                                                      new SubscribeToOperationalStateChangesMessage(true));

                result = response != null && response.OperationResult;
            }

            TracerHelper.TraceEntry(this.GetType().Name + ", Remote synchronization source " + sourceTransportInfo.OriginalSenderId.Value.Id.Name + " assinged - " + result.ToString());
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Handle a request message.
        /// </summary>
        protected virtual void HandleRequestMessage(TransportMessage message)
        {
            FastInvokeHelper.FastInvokeHandlerDelegate handler = GetMessageHandler(message);

            if (handler == null)
            {// We failed to find a handler for this type or for any of the parent ones.
                TracerHelper.TraceError("Client instance did not handle a request message received, client [" + this.GetType().Name + "], message [" + message.GetType().Name + "].");
                return;
            }

            // Before giving the requestMessage to the user class, make a copy of its transport info
            // so that if the user messes it up, we still can deliver the responce properly.
            TransportInfo requestMessageTransportInfo = message.TransportInfo.Clone();

            TransportMessage responseMessage = (TransportMessage)handler(this, new object[] { message });

            if (responseMessage == null)
            {// No result.
                return;
            }

            if (responseMessage is ResponseMessage)
            {
                ((ResponseMessage)responseMessage).RequestMessageTypeName = message.GetType().Name;
            }

            Guid            sessionGuid = requestMessageTransportInfo.CurrentTransportInfo.Value.Id;
            ArbiterClientId?senderID    = requestMessageTransportInfo.CurrentTransportInfo.Value.SenderID;

            requestMessageTransportInfo.PopTransportInfo();

            // Transfer inherited underlaying transport stack.
            responseMessage.TransportInfo = requestMessageTransportInfo;

            // Send the responce requestMessage back.
            DoSendCustom(false, sessionGuid, null, 0, senderID, this.SubscriptionClientID, responseMessage, TimeSpan.Zero);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// The "Responding" set of functions allows to easily send a new request to a location
        /// that has sent you a requestMessage, even if this location is remote (trough server-client nodes).
        /// </summary>
        protected TExpectedMessageClass SendAndReceiveResponding <TExpectedMessageClass>(TransportInfo inputMessageTransportInfo,
                                                                                         TransportMessage message, TimeSpan timeOut)
            where TExpectedMessageClass : TransportMessage
        {
            List <ArbiterClientId?> forwardingInfo = inputMessageTransportInfo.CreateRespondingClientList();

            return((TExpectedMessageClass)DoSendAndReceiveForwarding(forwardingInfo, message, timeOut, typeof(TExpectedMessageClass)));
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Override.
 /// </summary>
 protected TExpectedMessageClass SendAndReceiveResponding <TExpectedMessageClass>(
     TransportInfo incomingMessageTransportInfo, TransportMessage message)
     where TExpectedMessageClass : TransportMessage
 {
     return(SendAndReceiveResponding <TExpectedMessageClass>(incomingMessageTransportInfo, message, DefaultTimeOut));
 }
 public new void SendResponding(TransportInfo incomingMessageTransportInfo, TransportMessage message)
 {
     base.SendResponding(incomingMessageTransportInfo, message);
 }
Ejemplo n.º 7
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="singleThreadMode"></param>
 public OperationalTransportClient(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     _statusSynchronizationEnabled = info.GetBoolean("statusSynchronizationEnabled");
     _persistedRemoteStatusSynchronizationSource = (TransportInfo)info.GetValue("remoteStatusSynchronizationSource", typeof(TransportInfo));
 }