/// <summary> /// Converts a .NET object to a valid <see cref="NSObject"/> /// that can be sent to Flutter as a successful result of /// a <see cref="Flutnet.Interop.FlutterMethodChannel"/> method invoke. /// </summary> public static NSObject ToMethodChannelResult(FlutnetEventInfo message) { // FIX ISSUES ABOUT DICTIONARY JObject jsonObject = JObject.FromObject(message, Serializer); CleanObjectFromInvalidTypes(ref jsonObject); return(NSObject.FromObject(jsonObject.ToString(Formatting.None))); }
/// <summary> /// Converts a .NET object to a valid <see cref="Java.Lang.Object"/> /// that can be sent to Flutter as a successful result of /// a <see cref="Flutnet.Interop.Plugin.Common.MethodChannel"/> method invoke. /// </summary> public static Java.Lang.Object ToMethodChannelResult(FlutnetEventInfo message) { // FIX ISSUES ABOUT DICTIONARY IN FLUTTER JObject jsonObject = JObject.FromObject(message, Serializer); CleanObjectFromInvalidTypes(ref jsonObject); Java.Lang.Object obj = jsonObject.ToString(Formatting.None); return(obj); }
private void FlutnetRuntimeOnPlatformEvent(object sender, OnPlatformEventArgs e) { // Prevent dispatching events to Flutter through event channel // if bridge is configured for WebSocket communication if (Mode == FlutnetBridgeMode.WebSocket) { return; } FlutnetEventInfo eventInfo = new FlutnetEventInfo { InstanceId = e.ServiceName, EventName = e.EventName.FirstCharLower(), EventData = e.EventData }; NSObject eventValue = FlutterInterop.ToMethodChannelResult(eventInfo); // As stated here https://docs.microsoft.com/en-US/xamarin/essentials/main-thread#determining-if-code-is-running-on-the-main-thread: // The platform implementations of BeginInvokeOnMainThread themselves check if the call is made on the main thread. // There is very little performance penalty if you call BeginInvokeOnMainThread when it's not really necessary. if (!MainThread.IsMainThread) { MainThread.BeginInvokeOnMainThread(() => { try { _streamHandler.EventSink?.Invoke(eventValue); } catch (Exception ex) { // TODO: Properly log any error Console.WriteLine(ex.Message); } }); } else { try { _streamHandler.EventSink?.Invoke(eventValue); } catch (Exception ex) { // TODO: Properly log any error Console.WriteLine(ex.Message); } } }
private void FlutnetRuntimeOnPlatformEvent(object sender, OnPlatformEventArgs e) { // Prevent dispatching events to Flutter through event channel // if bridge is configured for WebSocket communication if (Mode == FlutnetBridgeMode.WebSocket) { return; } FlutnetEventInfo eventInfo = new FlutnetEventInfo { InstanceId = e.ServiceName, EventName = e.EventName.FirstCharLower(), EventData = e.EventData }; Object eventValue = FlutterInterop.ToMethodChannelResult(eventInfo); if (!MainThread.IsMainThread) { MainThread.BeginInvokeOnMainThread(() => { try { _streamHandler.EventSink?.Success(eventValue); } catch (Exception ex) { // TODO: Properly log any error Console.WriteLine(ex.Message); } }); } else { try { _streamHandler.EventSink?.Success(eventValue); } catch (Exception ex) { // TODO: Properly log any error Console.WriteLine(ex.Message); } } }
private void FlutnetRuntimeOnPlatformEvent(object sender, OnPlatformEventArgs e) { FlutnetEventInfo eventInfo = new FlutnetEventInfo { InstanceId = e.ServiceName, EventName = e.EventName.FirstCharLower(), EventData = e.EventData }; FlutnetMessage message = new FlutnetMessage() { MethodInfo = new FlutnetMethodInfo { RequestId = -1, Instance = e.ServiceName }, Result = null, EventInfo = eventInfo }; Send(message); }