| using System; | 
| using System.Collections.Generic; | 
| using System.Text; | 
| using System.Threading; | 
|   | 
| namespace Taobao.Top.Link.Endpoints | 
| { | 
|     public class SendCallback | 
|     { | 
|         private EventWaitHandle _handle; | 
|         private Exception _error; | 
|         private IDictionary<string, object> _return; | 
|   | 
|         /// <summary>get which endpoint to send | 
|         /// </summary> | 
|         public EndpointProxy Target { get; private set; } | 
|         /// <summary>get error in sending | 
|         /// </summary> | 
|         public Exception Error | 
|         { | 
|             get { return this._error; } | 
|             internal set | 
|             { | 
|                 this._error = value; | 
|                 this._handle.Set(); | 
|             } | 
|         } | 
|         /// <summary>get reply | 
|         /// </summary> | 
|         public IDictionary<string, object> Return | 
|         { | 
|             get { return this._return; } | 
|             internal set | 
|             { | 
|                 this._return = value; | 
|                 this._handle.Set(); | 
|             } | 
|         } | 
|   | 
|         public SendCallback(EndpointProxy endpointProxy) | 
|         { | 
|             this.Target = endpointProxy; | 
|             this._handle = new EventWaitHandle(false, EventResetMode.AutoReset); | 
|         } | 
|         /// <summary>wait until got return message | 
|         /// </summary> | 
|         /// <param name="timeout">timeout in milliseconds</param> | 
|         public void WaitReturn(int timeout) | 
|         { | 
|             if (timeout > 0) | 
|             { | 
|                 if (!this._handle.WaitOne(timeout, false)) | 
|                     throw new LinkException(Text.E_EXECUTE_TIMEOUT); | 
|             } | 
|             else | 
|                 this._handle.WaitOne(); | 
|         } | 
|     } | 
| } |