bool allow_read_buffering = true;
WebRequest request;
object locker;
- object user_token;
+ CallbackData callback_data;
public WebClient ()
{
public event UploadStringCompletedEventHandler UploadStringCompleted;
public event WriteStreamClosedEventHandler WriteStreamClosed;
- WebRequest SetupRequest (Uri uri, string method, object userToken)
+ WebRequest SetupRequest (Uri uri, string method, CallbackData callbackData)
{
- user_token = userToken;
+ callback_data = callbackData;
WebRequest request = GetWebRequest (uri);
request.Method = DetermineMethod (uri, method);
foreach (string header in Headers.AllKeys)
SetBusy ();
try {
- request = SetupRequest (address, "GET", userToken);
- request.BeginGetResponse (new AsyncCallback (DownloadStringAsyncCallback), new CallbackData (userToken));
+ request = SetupRequest (address, "GET", new CallbackData (userToken));
+ request.BeginGetResponse (new AsyncCallback (DownloadStringAsyncCallback), null);
}
catch (Exception e) {
WebException wex = new WebException ("Could not start operation.", e);
private void DownloadStringAsyncCallback (IAsyncResult result)
{
- CallbackData callback_data = (CallbackData) result.AsyncState;
string data = null;
Exception ex = null;
bool cancel = false;
SetBusy ();
try {
- request = SetupRequest (address, "GET", userToken);
- request.BeginGetResponse (new AsyncCallback (OpenReadAsyncCallback), new CallbackData (userToken));
+ request = SetupRequest (address, "GET", new CallbackData (userToken));
+ request.BeginGetResponse (new AsyncCallback (OpenReadAsyncCallback), null);
}
catch (Exception e) {
WebException wex = new WebException ("Could not start operation.", e);
private void OpenReadAsyncCallback (IAsyncResult result)
{
- CallbackData callback_data = (CallbackData) result.AsyncState;
Stream stream = null;
Exception ex = null;
bool cancel = false;
SetBusy ();
try {
- request = SetupRequest (address, method, userToken);
- request.BeginGetRequestStream (new AsyncCallback (OpenWriteAsyncCallback), new CallbackData (userToken));
+ request = SetupRequest (address, method, new CallbackData (userToken));
+ request.BeginGetRequestStream (new AsyncCallback (OpenWriteAsyncCallback), null);
}
catch (Exception e) {
WebException wex = new WebException ("Could not start operation.", e);
private void OpenWriteAsyncCallback (IAsyncResult result)
{
- CallbackData callback_data = (CallbackData) result.AsyncState;
Stream stream = null;
Exception ex = null;
bool cancel = false;
request.BeginGetResponse (OpenWriteAsyncResponseCallback, WebClientData);
}
catch (Exception e) {
- ((CallbackData) WebClientData).sync_context.Post (delegate (object sender) {
+ callback_data.sync_context.Post (delegate (object sender) {
OnWriteStreamClosed (new WriteStreamClosedEventArgs (e));
}, null);
}
ProcessResponse (response);
}
catch (Exception e) {
- ((CallbackData) result.AsyncState).sync_context.Post (delegate (object sender) {
+ callback_data.sync_context.Post (delegate (object sender) {
OnWriteStreamClosed (new WriteStreamClosedEventArgs (e));
}, null);
}
SetBusy ();
try {
- request = SetupRequest (address, method, userToken);
- request.BeginGetRequestStream (new AsyncCallback (UploadStringRequestAsyncCallback), new CallbackData (userToken, encoding.GetBytes (data)));
+ request = SetupRequest (address, method, new CallbackData (userToken, encoding.GetBytes (data)));
+ request.BeginGetRequestStream (new AsyncCallback (UploadStringRequestAsyncCallback), null);
}
catch (Exception e) {
WebException wex = new WebException ("Could not start operation.", e);
private void UploadStringRequestAsyncCallback (IAsyncResult result)
{
try {
- CallbackData callback_data = (CallbackData) result.AsyncState;
Stream stream = request.EndGetRequestStream (result);
stream.Write (callback_data.data, 0, callback_data.data.Length);
- request.BeginGetResponse (new AsyncCallback (UploadStringResponseAsyncCallback), callback_data);
+ request.BeginGetResponse (new AsyncCallback (UploadStringResponseAsyncCallback), null);
}
catch {
request.Abort ();
private void UploadStringResponseAsyncCallback (IAsyncResult result)
{
- CallbackData callback_data = (CallbackData) result.AsyncState;
string data = null;
Exception ex = null;
bool cancel = false;
WebRequest request = WebRequest.Create (uri);
request.SetupProgressDelegate (delegate (long read, long length) {
- OnDownloadProgressChanged (new DownloadProgressChangedEventArgs (read, length, user_token));
+ callback_data.sync_context.Post (delegate (object sender) {
+ OnDownloadProgressChanged (new DownloadProgressChangedEventArgs (read, length, callback_data.user_token));
+ }, null);
+
});
return request;
}