2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Threading.Tasks;
20 namespace Tizen.Network.WiFi
22 internal static class EventHandlerExtension
24 internal static void SafeInvoke(this EventHandler evt, object sender, EventArgs e)
33 internal static void SafeInvoke<T>(this EventHandler<T> evt, object sender, T e) where T : EventArgs
43 internal partial class WiFiManagerImpl
45 private event EventHandler<DeviceStateChangedEventArgs> _deviceStateChanged;
46 private event EventHandler<ConnectionStateChangedEventArgs> _connectionStateChanged;
47 private event EventHandler<RssiLevelChangedEventArgs> _rssiLevelChanged;
48 private event EventHandler _backgroundScanFinished;
50 private Interop.WiFi.DeviceStateChangedCallback _deviceChangedCallback;
51 private Interop.WiFi.ConnectionStateChangedCallback _connectionChangedCallback;
52 private Interop.WiFi.RssiLevelChangedCallback _rssiChangedCallback;
53 private Interop.WiFi.VoidCallback _backgroundScanFinishedCallback;
55 internal event EventHandler<DeviceStateChangedEventArgs> DeviceStateChanged
59 if (_deviceStateChanged == null)
61 RegisterDeviceStateChangedEvent();
63 _deviceStateChanged += value;
67 _deviceStateChanged -= value;
68 if (_deviceStateChanged == null)
70 UnregisterDeviceStateChangedEvent();
75 internal event EventHandler<ConnectionStateChangedEventArgs> ConnectionStateChanged
79 if (_connectionStateChanged == null)
81 RegisterConnectionStateChangedEvent();
83 _connectionStateChanged += value;
87 _connectionStateChanged -= value;
88 if (_connectionStateChanged == null)
90 UnregisterConnectionStateChangedEvent();
95 internal event EventHandler<RssiLevelChangedEventArgs> RssiLevelChanged
99 if (_rssiLevelChanged == null)
101 RegisterRssiLevelChangedEvent();
103 _rssiLevelChanged += value;
107 _rssiLevelChanged -= value;
108 if (_rssiLevelChanged == null)
110 UnregisterRssiLevelChangedEvent();
115 internal event EventHandler BackgroundScanFinished
119 if (_backgroundScanFinished == null)
121 RegisterBackgroundScanFinishedEvent();
123 _backgroundScanFinished += value;
127 _backgroundScanFinished -= value;
128 if (_backgroundScanFinished == null)
130 UnregisterBackgroundScanFinishedEvent();
135 private void RegisterDeviceStateChangedEvent()
137 _deviceChangedCallback = (int deviceState, IntPtr userDate) =>
139 WiFiDeviceState state = (WiFiDeviceState)deviceState;
140 DeviceStateChangedEventArgs e = new DeviceStateChangedEventArgs(state);
141 _deviceStateChanged.SafeInvoke(null, e);
143 int ret = Interop.WiFi.SetDeviceStateChangedCallback(GetSafeHandle(), _deviceChangedCallback, IntPtr.Zero);
144 if (ret != (int)WiFiError.None)
146 Log.Error(Globals.LogTag, "Failed to set device state changed callback, Error - " + (WiFiError)ret);
150 private void UnregisterDeviceStateChangedEvent()
152 int ret = Interop.WiFi.UnsetDeviceStateChangedCallback(GetSafeHandle());
153 if (ret != (int)WiFiError.None)
155 Log.Error(Globals.LogTag, "Failed to unset device state changed callback, Error - " + (WiFiError)ret);
159 private void RegisterConnectionStateChangedEvent()
161 _connectionChangedCallback = (int connectionState, IntPtr ap, IntPtr userData) =>
163 if (ap != IntPtr.Zero)
165 WiFiConnectionState state = (WiFiConnectionState)connectionState;
166 ConnectionStateChangedEventArgs e = new ConnectionStateChangedEventArgs(state, ap);
167 _connectionStateChanged.SafeInvoke(null, e);
170 int ret = Interop.WiFi.SetConnectionStateChangedCallback(GetSafeHandle(), _connectionChangedCallback, IntPtr.Zero);
171 if (ret != (int)WiFiError.None)
173 Log.Error(Globals.LogTag, "Failed to set copnnection state changed callback, Error - " + (WiFiError)ret);
177 private void UnregisterConnectionStateChangedEvent()
179 int ret = Interop.WiFi.UnsetConnectionStateChangedCallback(GetSafeHandle());
180 if (ret != (int)WiFiError.None)
182 Log.Error(Globals.LogTag, "Failed to unset device state changed callback, Error - " + (WiFiError)ret);
186 private void RegisterRssiLevelChangedEvent()
189 _rssiChangedCallback = (int rssiLevel, IntPtr userDate) =>
191 WiFiRssiLevel level = (WiFiRssiLevel)rssiLevel;
192 RssiLevelChangedEventArgs e = new RssiLevelChangedEventArgs(level);
193 _rssiLevelChanged.SafeInvoke(null, e);
195 int ret = Interop.WiFi.SetRssiLevelchangedCallback(GetSafeHandle(), _rssiChangedCallback, IntPtr.Zero);
196 if (ret != (int)WiFiError.None)
198 Log.Error(Globals.LogTag, "Failed to set rssi level changed callback, Error - " + (WiFiError)ret);
202 private void UnregisterRssiLevelChangedEvent()
204 int ret = Interop.WiFi.UnsetRssiLevelchangedCallback(GetSafeHandle());
205 if (ret != (int)WiFiError.None)
207 Log.Error(Globals.LogTag, "Failed to unset rssi level changed callback, Error - " + (WiFiError)ret);
211 private void RegisterBackgroundScanFinishedEvent()
213 _backgroundScanFinishedCallback = (int result, IntPtr userDate) =>
215 EventArgs e = new EventArgs();
216 _backgroundScanFinished.SafeInvoke(null, e);
218 int ret = Interop.WiFi.SetBackgroundScanCallback(GetSafeHandle(), _backgroundScanFinishedCallback, IntPtr.Zero);
219 if (ret != (int)WiFiError.None)
221 Log.Error(Globals.LogTag, "Failed to set background scan callback, Error - " + (WiFiError)ret);
225 private void UnregisterBackgroundScanFinishedEvent()
227 int ret = Interop.WiFi.UnsetBackgroundScanCallback(GetSafeHandle());
228 if (ret != (int)WiFiError.None)
230 Log.Error(Globals.LogTag, "Failed to unset background scan callback, Error - " + (WiFiError)ret);