public static extern bool FlutterDesktopMessengerSendWithReply( FlutterDesktopMessenger messenger, string channel, IntPtr message, uint message_size, FlutterDesktopBinaryReply reply, IntPtr user_data);
private async void OnMessageReceived(FlutterDesktopMessenger messenger, IntPtr message, IntPtr userData) { var receivedMessage = Marshal.PtrToStructure <FlutterDesktopMessage>(message); var messageBytes = new byte[receivedMessage.message_size]; Marshal.Copy(receivedMessage.message, messageBytes, 0, (int)receivedMessage.message_size); if (_handlers.TryGetValue(receivedMessage.channel, out var handler)) { byte[] replyBytes = await handler(messageBytes); if (replyBytes != null) { using (var pinned = PinnedObject.Get(replyBytes)) { FlutterDesktopMessengerSendResponse(messenger, receivedMessage.response_handle, pinned.Pointer, (uint)replyBytes.Length); } } else { FlutterDesktopMessengerSendResponse(messenger, receivedMessage.response_handle, IntPtr.Zero, 0); } } else { FlutterDesktopMessengerSendResponse(messenger, receivedMessage.response_handle, IntPtr.Zero, 0); } }
public static extern void FlutterDesktopMessengerSetCallback( FlutterDesktopMessenger messenger, string channel, FlutterDesktopMessageCallback callback, IntPtr user_data);
public static extern void FlutterDesktopMessengerSendResponse( FlutterDesktopMessenger messenger, IntPtr handle, IntPtr data, uint data_length);
public static extern bool FlutterDesktopMessengerSend( FlutterDesktopMessenger messenger, string channel, IntPtr message, uint message_size);
private DefaultBinaryMessenger(FlutterDesktopMessenger messenger) { _messenger = messenger; _replyCallback = OnReplyMessageReceived; _messageCallback = OnMessageReceived; }