Exemple #1
0
        /// <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);
        }
Exemple #3
0
        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);
        }