2
// MonoMac.CFNetwork.Test.Models.AsyncTaskRunner
5
// Martin Baulig (martin.baulig@gmail.com)
7
// Copyright 2012 Xamarin Inc. (http://www.xamarin.com)
10
// Permission is hereby granted, free of charge, to any person obtaining
11
// a copy of this software and associated documentation files (the
12
// "Software"), to deal in the Software without restriction, including
13
// without limitation the rights to use, copy, modify, merge, publish,
14
// distribute, sublicense, and/or sell copies of the Software, and to
15
// permit persons to whom the Software is furnished to do so, subject to
16
// the following conditions:
18
// The above copyright notice and this permission notice shall be
19
// included in all copies or substantial portions of the Software.
21
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
using System.Net.Http;
32
using System.Threading;
33
using System.Threading.Tasks;
34
using MonoMac.CFNetwork;
36
namespace MonoMac.CFNetwork.Test.Models {
38
public abstract class AsyncTaskRunner {
39
protected HttpClient CreateClient ()
41
return CreateClient (false);
44
protected virtual HttpClient CreateClient (bool defaultHandler)
46
var handler = defaultHandler ? new HttpClientHandler () : new MessageHandler ();
47
var client = new HttpClient (handler, true);
48
ApplySettings (client, handler);
52
protected virtual void ApplySettings (HttpClient client, HttpClientHandler handler)
54
var settings = AppDelegate.StaticSettings;
56
handler.AllowAutoRedirect = settings.AutoRedirect;
58
if (!settings.UseRelativeURL)
59
client.BaseAddress = null;
61
client.BaseAddress = new Uri (settings.RelativeURL);
63
if (settings.UseAuthentication) {
64
handler.Credentials = new NetworkCredential (
65
settings.UserName, settings.Password);
67
handler.Credentials = null;
71
internal abstract Task<string> Run (Uri uri, CancellationToken cancellationToken);
73
public event EventHandler OperationStartedEvent;
75
protected void OnOperationStartedEvent (object sender)
77
if (OperationStartedEvent != null)
78
OperationStartedEvent (sender, null);
81
public class MessageEventArgs : EventArgs {
82
public string Message {
87
public MessageEventArgs (string message)
93
public event EventHandler<MessageEventArgs> MessageEvent;
95
protected virtual void OnMessageEvent (string message)
97
OnMessageEvent (this, new MessageEventArgs (message));
100
protected virtual void OnMessageEvent (string message, params object[] args)
102
OnMessageEvent (this, new MessageEventArgs (string.Format (message, args)));
105
protected virtual void OnMessageEvent (object sender, MessageEventArgs args)
107
if (MessageEvent != null)
108
MessageEvent (sender, args);
111
public abstract bool CanReportProgress {
115
public class ProgressChangedEventArgs : EventArgs {
116
public long Current {
126
public ProgressChangedEventArgs (long current, long? total)
133
public event EventHandler<ProgressChangedEventArgs> ProgressChangedEvent;
135
protected virtual void OnProgressChangedEvent (long current, long? total)
137
OnProgressChangedEvent (this, new ProgressChangedEventArgs (current, total));
140
protected virtual void OnProgressChangedEvent (object sender, ProgressChangedEventArgs args)
142
if (ProgressChangedEvent != null)
143
ProgressChangedEvent (this, args);
146
public abstract bool CanSendResponse {
150
public class ResponseEventArgs : EventArgs {
151
public HttpResponseMessage Response {
156
public ResponseEventArgs (HttpResponseMessage response)
162
public event EventHandler<ResponseEventArgs> ResponseEvent;
164
protected virtual void OnResponseEvent (HttpResponseMessage response)
166
OnResponseEvent (this, new ResponseEventArgs (response));
169
protected virtual void OnResponseEvent (object sender, ResponseEventArgs args)
171
if (ResponseEvent != null)
172
ResponseEvent (this, args);