public void Start() { if (this.listener.IsListening) throw new ArgumentException("already listening"); this.listener.Start(); Log.Message($"Web server started at {url}"); CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; TaskFactory taskFactory = new TaskFactory(token, TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning, TaskScheduler.Default); this.listenerTask = taskFactory.StartNew(() => { while (!token.IsCancellationRequested) { var context = this.listener.GetContextAsync(); var httpRequest = context.Result.Request; var request = new WebHookRequest() {Request = HttpRequestParser.Extract(httpRequest)}; this.requests.Enqueue(request); var response = context.Result.Response; response.StatusCode = 200; var message = System.Text.Encoding.UTF8.GetBytes("OK"); response.ContentLength64 = message.Length; response.ContentType = "text"; var outputstream = response.OutputStream; outputstream.Write(message, 0, message.Length); outputstream.Close(); } }, token); }
public void Start() { if (this.listener.IsListening) { throw new ArgumentException("already listening"); } this.listener.Start(); Log.Message($"Web server started at {url}"); CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; TaskFactory taskFactory = new TaskFactory(token, TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning, TaskScheduler.Default); this.listenerTask = taskFactory.StartNew(() => { while (!token.IsCancellationRequested) { var context = this.listener.GetContextAsync(); var httpRequest = context.Result.Request; var request = new WebHookRequest() { Request = HttpRequestParser.Extract(httpRequest) }; this.requests.Enqueue(request); var response = context.Result.Response; response.StatusCode = 200; var message = System.Text.Encoding.UTF8.GetBytes("OK"); response.ContentLength64 = message.Length; response.ContentType = "text"; var outputstream = response.OutputStream; outputstream.Write(message, 0, message.Length); outputstream.Close(); } }, token); }
static void ProcessWebHook(GitLabWrapper gitLabWrapper, string serviceUser, WebHookRequest request, bool supportSendingMessages, string farmTaskName) { var hookType = ProjectHookClient.ParseHookType(request); if (hookType == null) return; Log.Message($"Web hook received."); Log.Message($"Web hook type: {hookType.HookType}."); var hook = ProjectHookClient.ParseHook(hookType); if (hook.HookType == ProjectHookType.push) ProcessPushHook((PushHookClient)hook); else if (hook.HookType == ProjectHookType.merge_request) ProcessMergeRequestHook(gitLabWrapper, serviceUser, (MergeRequestHookClient)hook, supportSendingMessages, farmTaskName); else if (hook.HookType == ProjectHookType.build) ProcessBuildHook(gitLabWrapper, serviceUser, (BuildHookClient)hook, supportSendingMessages, farmTaskName); }