Author: jbevain
Date: 2007-11-08 10:56:16 -0500 (Thu, 08 Nov 2007)
New Revision: 89200

Modified:
   
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebAsyncResult.cs
   
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebRequest.cs
   trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/ChangeLog
Log:
2007-11-08  Jb Evain  <[EMAIL PROTECTED]>

        * BrowserHttpWebAsyncResult.cs
        * BrowserHttpWebRequest.cs: implement async requests.



Modified: 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebAsyncResult.cs
===================================================================
--- 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebAsyncResult.cs
        2007-11-08 15:52:17 UTC (rev 89199)
+++ 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebAsyncResult.cs
        2007-11-08 15:56:16 UTC (rev 89200)
@@ -49,10 +49,17 @@
                AsyncCallback callback;
                ManualResetEvent wait_handle;
 
+               BrowserHttpWebResponse response;
+
                public object AsyncState {
                        get { return state; }
                }
 
+               public BrowserHttpWebResponse Response {
+                       get { return response; }
+                       set { response = value; }
+               }
+
                public WaitHandle AsyncWaitHandle {
                        get {
                                if (wait_handle != null)

Modified: 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebRequest.cs
===================================================================
--- 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebRequest.cs
    2007-11-08 15:52:17 UTC (rev 89199)
+++ 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/BrowserHttpWebRequest.cs
    2007-11-08 15:56:16 UTC (rev 89200)
@@ -45,6 +45,7 @@
                WebHeaderCollection headers = new WebHeaderCollection ();
                MemoryStream request;
                BrowserHttpWebResponse response;
+               BrowserHttpWebAsyncResult async_result;
 
                public BrowserHttpWebRequest (Uri uri)
                        : base (uri)
@@ -54,6 +55,9 @@
 
                ~BrowserHttpWebRequest ()
                {
+                       if (async_result != null)
+                               async_result.Dispose ();
+
                        if (native == IntPtr.Zero)
                                return;
 
@@ -122,21 +126,39 @@
                        throw new NotImplementedException ();
                }
 
-               [MonoTODO]
                public override IAsyncResult BeginGetResponse (AsyncCallback 
callback, object state)
                {
-                       throw new NotImplementedException ();
+                       InitializeNativeRequest ();
+
+                       async_result = new BrowserHttpWebAsyncResult (callback, 
state);
+                       NativeMethods.browser_http_request_get_async_response 
(native, OnAsyncResponseAvailable, IntPtr.Zero);
+                       return async_result;
                }
 
+               void OnAsyncResponseAvailable (IntPtr native, IntPtr context)
+               {
+                       async_result.Response = new BrowserHttpWebResponse 
(native);
+                       async_result.SetComplete ();
+               }
+
                public override Stream EndGetRequestStream (IAsyncResult 
asyncResult)
                {
                        throw new NotImplementedException ();
                }
 
-               [MonoTODO]
                public override HttpWebResponse EndGetResponse (IAsyncResult 
asyncResult)
                {
-                       throw new NotImplementedException ();
+                       if (async_result != asyncResult)
+                               throw new ArgumentException ();
+
+                       if (!async_result.IsCompleted)
+                               async_result.AsyncWaitHandle.WaitOne ();
+
+                       response = async_result.Response;
+                       async_result.Dispose ();
+
+                       response.Read ();
+                       return response;
                }
 
                public override Stream GetRequestStream ()

Modified: 
trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/ChangeLog
===================================================================
--- trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/ChangeLog   
2007-11-08 15:52:17 UTC (rev 89199)
+++ trunk/olive/class/System.Silverlight/System.Windows.Browser.Net/ChangeLog   
2007-11-08 15:56:16 UTC (rev 89200)
@@ -1,3 +1,8 @@
+2007-11-08  Jb Evain  <[EMAIL PROTECTED]>
+
+       * BrowserHttpWebAsyncResult.cs
+       * BrowserHttpWebRequest.cs: implement async requests.
+
 2007-11-07  Jb Evain  <[EMAIL PROTECTED]>
 
        * BrowserHttpWebAsyncResult.cs: implement this cutie.

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to