internal ServiceStateChangedEventArgs(WiFiDirectError error, WiFiDirectServiceDiscoveryState state, WiFiDirectServiceType type, string response, WiFiDirectPeer peer) { _error = error; _state = state; _type = type; _response = response; _peer = peer; }
private void RegisterServiceStateChangedEvent() { _serviceStateChangedCallback = (int result, WiFiDirectServiceDiscoveryState stateInfo, WiFiDirectServiceType typeInfo, IntPtr responseData, string address, IntPtr userData) => { if (_serviceStateChanged != null) { WiFiDirectError error = (WiFiDirectError)result; WiFiDirectServiceDiscoveryState state = stateInfo; WiFiDirectServiceType type = typeInfo; string response = Marshal.PtrToStringAnsi(responseData); IntPtr peer; Interop.WiFiDirect.GetDiscoveredPeerInfo(address, out peer); DiscoveredPeerStruct peerStruct = (DiscoveredPeerStruct)Marshal.PtrToStructure(peer, typeof(DiscoveredPeerStruct)); _serviceStateChanged(null, new ServiceStateChangedEventArgs(error, state, type, response, WiFiDirectUtils.ConvertStructToDiscoveredPeer(peerStruct))); } }; int ret = Interop.WiFiDirect.SetServiceStateChangedCallback(_serviceStateChangedCallback, IntPtr.Zero); if (ret != (int)WiFiDirectError.None) { Log.Error(Globals.LogTag, "Failed to set service state changed callback, Error - " + (WiFiDirectError)ret); } }