Пример #1
0
            /// <summary>
            /// 任务设置行为
            /// </summary>
            /// <param name="table">任务列表</param>
            /// <param name="id">任务id</param>
            /// <param name="timeout">超时时间</param>
            public TaskSetAction(TaskSetActionTable table, long id, TimeSpan timeout)
            {
                this.Id        = id;
                this.ValueType = typeof(T);

                this.table      = table;
                this.taskSource = new TaskCompletionSource <T>();
                this.timer      = new Timer(this.OnTimerCallback, null, timeout, TimeSpan.FromMilliseconds(-1));
            }
Пример #2
0
 /// <summary>
 /// 设置Api行为返回的任务异常 
 /// 设置失败则返远程异常对象
 /// </summary>   
 /// <param name="taskSetActionTable">任务行为表</param>
 /// <param name="requestContext">请求上下文</param>     
 /// <returns></returns>
 public static RemoteException SetApiActionTaskException(TaskSetActionTable taskSetActionTable, RequestContext requestContext)
 {
     var body = requestContext.Packet.body;
     var message = body == null ? null : body.ToString();
     var taskSetAction = taskSetActionTable.Take(requestContext.Packet.id);
     if (taskSetAction != null)
     {
         taskSetAction.SetAction(SetTypes.SetReturnException, message, null);
         return null;
     }
     return new RemoteException(message);
 }
Пример #3
0
 /// <summary>
 /// 释放资源
 /// </summary>
 public void Dispose()
 {
     this.table = null;
     this.timer.Dispose();
 }
Пример #4
0
 /// <summary>
 /// timer回调
 /// </summary>
 /// <param name="state"></param>
 private void OnTimerCallback(object state)
 {
     this.table.Take(this.Id);
     this.SetException(new TimeoutException());
     this.table = null;
 }
Пример #5
0
 /// <summary>
 /// 设置Api行为返回的任务结果
 /// </summary>
 /// <param name="requestContext">上下文</param>
 /// <param name="taskSetActionTable">任务行为表</param>
 public static void SetApiActionTaskResult(RequestContext requestContext, TaskSetActionTable taskSetActionTable)
 {
     var taskSetAction = taskSetActionTable.Take(requestContext.Packet.id);
     if (taskSetAction != null)
     {
         var returnValue = requestContext.Packet.body;
         var serializer = requestContext.Session.Server.JsonSerializer;
         taskSetAction.SetAction(SetTypes.SetReturnReult, returnValue, serializer);
     }
 }