Revert "[runtime] Use pthread_cond_timedwait_relative_np () function on osx if availa...
[mono.git] / mcs / class / System.Net / System.Net.NetworkInformation / NetworkChange_2_1.cs
index a06941c8c23fc7c1fb7a19c63130c9c4af61f3d9..5cdf15f1db97b99fe82d0cce1dc85d7c75c2bc0d 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-#if NET_2_1
+#if MOBILE
+using System.Runtime.InteropServices;
+
 namespace System.Net.NetworkInformation {
        public abstract class NetworkChange {
+               internal delegate void NetworkStateChangedCallback (IntPtr sender, IntPtr data);
+               static NetworkChange ()
+               {
+                       state_changed_callback = new NetworkStateChangedCallback (StateChangedCallback);
+                       _moonlight_cbinding_moon_network_service_set_network_state_changed_callback (_moonlight_cbinding_runtime_get_network_service(),
+                                                                                state_changed_callback,
+                                                                                IntPtr.Zero);
+               }
+
+               static NetworkStateChangedCallback state_changed_callback;
+
+               static void StateChangedCallback (IntPtr sender, IntPtr data)
+               {
+                       try {
+                               NetworkAddressChangedEventHandler h = NetworkAddressChanged;
+                               if (h != null)
+                                       h (null, EventArgs.Empty);
+                       } catch (Exception ex) {
+                               try {
+                                       Console.WriteLine ("Unhandled exception: {0}", ex);
+                               } catch {
+                                       // Ignore
+                               }
+                       }
+               }
+
                protected NetworkChange ()
                {
                }
 
-               // Disable the warnings about the events not being used.
-#pragma warning disable 67
                public static event NetworkAddressChangedEventHandler NetworkAddressChanged;
-#pragma warning restore
+
+               [DllImport ("moon")]
+               internal extern static IntPtr _moonlight_cbinding_runtime_get_network_service ();
+
+               [DllImport ("moon")]
+               internal extern static void _moonlight_cbinding_moon_network_service_set_network_state_changed_callback (IntPtr service,
+                                                                                                    NetworkStateChangedCallback handler, IntPtr data);
+
+               [DllImport ("moon")]
+               internal extern static bool _moonlight_cbinding_moon_network_service_get_is_network_available (IntPtr service);
        }
 }
 #endif