Exemplo n.º 1
0
        protected virtual WebProgressTask?PrepairProgressTask(HttpConnection connection)
        {
            var stream = connection.NetworkStream;

            if (stream == null)
            {
                try
                {
                    stream = connection.NetworkStream = connection.NetworkClient?.GetStream();
                }
                catch (InvalidOperationException)
                { return(null); }
            }
            var task = new WebProgressTask
            {
                CurrentStage  = ServerStage.FIRST_STAGE,
                NextStage     = (ServerStage)((int)ServerStage.FIRST_STAGE + 1),
                Server        = this,
                Connection    = connection,
                NetworkStream = stream,
            };

            if (Settings.MonitoringOutputDirectory != null)
            {
                task.EnableMonitoring();
            }
            return(task);
        }
 public override bool CanWorkWith(WebProgressTask task, out CallInfo?data)
 {
     if (!CheckPrecondition(task))
     {
         data = null;
         return(false);
     }
     foreach (var service in Services)
     {
         using var watch = task.Monitor.Watch(service, "CanWorkWith()");
         if (service is WebService2 service2)
         {
             if (service2.CanWorkWith(task, out object?data_))
             {
                 data = new CallInfo(service, data_);
                 return(true);
             }
         }
         else
         {
             if (service.CanWorkWith(task))
             {
                 data = new CallInfo(service, null);
                 return(true);
             }
         }
         GC.KeepAlive(watch);
     }
     data = null;
     return(false);
 }
Exemplo n.º 3
0
        public virtual void SetPost(WebProgressTask task, IO.ContentStream content, string?mime)
        {
            Content = content;
            string args = "";

            if (mime != null)
            {
                var ind = mime.IndexOf(';');
                if (ind >= 0)
                {
                    args = mime.Substring(ind + 1);
                    mime = mime.Remove(ind);
                }
            }

            if ((MimeType = mime) != null &&
                DataHandler.TryGetValue(mime !, out Func <IPostData>?constructor)
                )
            {
                LazyData = new Lazy <Task <IPostData> >(() =>
                {
                    return(Task.Run(async() =>
                    {
                        var data = constructor();
                        await data.SetAsync(task, content, args).ConfigureAwait(false);
                        return data;
                    }));
                }, System.Threading.LazyThreadSafetyMode.ExecutionAndPublication);
            }
Exemplo n.º 4
0
 public override Task ProgressTask(WebProgressTask task)
 {
     if (!task.Document.Information.TryGetValue(this, out object?data))
     {
         data = null;
     }
     return(ProgressTask(task, data));
 }
Exemplo n.º 5
0
 public void SetPost(WebProgressTask task, ReadOnlyMemory <byte> post, string mime)
 {
     Task.Request.Post.SetPost(
         task,
         new IO.ContentStream(new IO.NetworkReader(new IO.SpanStream(post)), post.Length),
         mime
         );
 }
 public override Task ProgressTask(WebProgressTask task, CallInfo?data)
 {
     if (data is null)
     {
         return(Task.CompletedTask);
     }
     using (task.Monitor.Watch(data.Service, "ProgressTask()"))
         return(data.ProgressTask(task));
 }
Exemplo n.º 7
0
 public override bool CanWorkWith(WebProgressTask task)
 {
     if (!CanWorkWith(task, out object?data))
     {
         return(false);
     }
     task.Document[this] = data;
     return(true);
 }
 public Task ProgressTask(WebProgressTask task)
 {
     if (Service is WebService2 ws2)
     {
         return(ws2.ProgressTask(task, Data));
     }
     else
     {
         return(Service.ProgressTask(task));
     }
 }
Exemplo n.º 9
0
 public WebServerTaskCreator()
 {
     Task = new WebProgressTask()
     {
         CurrentStage = ServerStage.FIRST_STAGE,
         Connection   = new HttpConnection
         {
             Ip = "127.0.0.1",
         },
         NetworkStream = new MemoryStream()
     };
     TerminationStage = ServerStage.FINAL_STAGE;
 }
Exemplo n.º 10
0
 internal protected virtual async Task ExecuteTaskChain(WebProgressTask task, ServerStage terminationState = ServerStage.FINAL_STAGE)
 {
     if (task == null)
     {
         return;
     }
     while (true)
     {
         using var watch = task.Monitor.Watch(this, $"Web Service Group: {task.CurrentStage}");
         await WebServiceGroups[task.CurrentStage].Execute(task).ConfigureAwait(false);
         if (task.CurrentStage == terminationState)
         {
             break;
         }
         task.CurrentStage = task.NextStage;
         task.NextStage    = task.NextStage == ServerStage.FINAL_STAGE
             ? ServerStage.FINAL_STAGE
             : (ServerStage)((int)task.NextStage + 1);
     }
 }
Exemplo n.º 11
0
 public abstract bool CanWorkWith(WebProgressTask task);
Exemplo n.º 12
0
 public abstract Task ProgressTask(WebProgressTask task);
 /// <summary>
 /// This is precondition that will be checked before all contained <see cref="WebService"
 /// />s will be checked. This member is to be intended to be overwritten.
 /// </summary>
 /// <param name="task">The task that is currently executed.</param>
 /// <returns>The check result.</returns>
 public virtual bool CheckPrecondition(WebProgressTask task)
 {
     return(true);
 }
Exemplo n.º 14
0
 public abstract bool CanWorkWith(WebProgressTask task, out object?data);
Exemplo n.º 15
0
 public abstract Task ProgressTask(WebProgressTask task, object?data);