public V8Callback(IV8Plugin plugin, CefV8Value callback, V8CallbackType callbackType, Action <V8Callback> disposeHandler = null) { _plugin = plugin; CallbackFunction = callback; _callbackType = callbackType; _disposeHandler = disposeHandler; Identifier = Guid.NewGuid(); }
public V8Callback GetOrCreateCallback(IV8Plugin plugin, string memberName, CefV8Value callback, V8CallbackType callbackType) { V8Callback adapter = null; _callbacksByMemberName.AddOrUpdate( memberName, key => { var disposeCallback = new Action <V8Callback>(cb => DisposeCallback(memberName, cb)); adapter = new V8Callback(plugin, callback, callbackType, disposeCallback); return(new List <V8Callback> { adapter }); }, (key, list) => { adapter = list.FirstOrDefault(c => c.CallbackFunction != null && c.CallbackFunction.IsSame(callback)); if (adapter == null) { var disposeCallback = new Action <V8Callback>(cb => DisposeCallback(memberName, cb)); adapter = new V8Callback(plugin, callback, callbackType, disposeCallback); list.Add(adapter); } return(list); }); return(adapter); }