/// <summary> /// Registers a method call handler on this channel. /// </summary> /// <param name="handler">A <see cref="MethodCallHandler"/>, or null to deregister.</param> public void SetMethodCallHandler(MethodCallHandler handler) { async Task <byte[]> binaryHandler(byte[] bytes) { MethodCall call = Codec.DecodeMethodCall(bytes); try { return(Codec.EncodeSuccessEnvelope(await handler(call))); } catch (FlutterException e) { return(Codec.EncodeErrorEnvelope(e.Code, e.Message, e.Details, e.StackTrace)); } catch (MissingPluginException) { return(null); } catch (Exception e) { return(Codec.EncodeErrorEnvelope("error", e.Message, null, e.StackTrace)); } } BinaryMessenger.SetMessageHandler(Name, handler == null ? null : (BinaryMessageHandler)binaryHandler); }
/// <summary> /// Registers a method call handler on this channel. /// </summary> /// <param name="handler">An asynchronous callback function to handle the <see cref="MethodCall">.</param> public void SetMethodCallHandler(Func <MethodCall, Task <object> > handler) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } BinaryMessenger.SetMessageHandler(Name, async(byte[] bytes) => { MethodCall call = Codec.DecodeMethodCall(bytes); try { return(Codec.EncodeSuccessEnvelope(await handler(call))); } catch (FlutterException e) { return(Codec.EncodeErrorEnvelope(e.Code, e.Message, e.Details, e.StackTrace)); } catch (MissingPluginException) { return(null); } catch (Exception e) { return(Codec.EncodeErrorEnvelope("error", e.Message, null, e.StackTrace)); } }); }