Ejemplo n.º 1
0
 internal IDictionary<string, object> SendAndWait(EndpointProxy e
     , IChannelSender sender
     , Message message
     , int timeout)
 {
     SendCallback callback = new SendCallback(e);
     this.Send(message, sender, callback);
     callback.WaitReturn(timeout);
     if (callback.Error != null)
         throw callback.Error;
     return callback.Return;
 }
Ejemplo n.º 2
0
 public void Send(Message message, IChannelSender sender, SendCallback callback)
 {
     if (callback != null)
     {
         message.Flag = System.Threading.Interlocked.Increment(ref this._flag);
         this._callbacks.Add(message.Flag, callback);
     }
     using (var s = new MemoryStream())
     {
         MessageIO.WriteMessage(s, message);
         this.GetChannel(sender).Send(s.ToArray());
     }
 }
Ejemplo n.º 3
0
 private void HandleCallback(SendCallback callback, Message msg, Identity msgFrom)
 {
     if (!callback.Target.Identity.Equals(msgFrom))
     {
         this._log.WarnFormat(Text.E_IDENTITY_NOT_MATCH_WITH_CALLBACK, msgFrom, callback.Target.Identity);
         return;
     }
     if (this.IsError(msg))
         callback.Error = new LinkException(msg.StatusCode, msg.StatusPhase);
     else
         callback.Return = msg.Content;
 }
Ejemplo n.º 4
0
        private void HandleConnectAck(SendCallback callback, Message msg)
        {
            if (callback == null)
                throw new LinkException(Text.E_NO_CALLBACK);
            if (this.IsError(msg))
                callback.Error = new LinkException(msg.StatusCode, msg.StatusPhase);
            else
            {
                callback.Return = null;
                // set token for proxy for sending message next time
                callback.Target.Token = msg.Token;
                // store token from target endpoint for receiving it's message
                // next time
                if (this._idByToken.ContainsKey(msg.Token))
                    this._idByToken[msg.Token] = callback.Target.Identity;
                else
                    this._idByToken.Add(msg.Token, callback.Target.Identity);

                this._log.InfoFormat(Text.E_CONNECT_SUCCESS, callback.Target.Identity, msg.Token);
            }
        }