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; }
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()); } }
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; }
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); } }