/// <inheritdoc /> public async Task <BridgeResponse> ProcessBridgeRequest(BridgeParameters parameters, CancellationToken cancellationToken) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } IBridgeHandler bridgeHandler = null; for (var i = 0; bridgeHandler == null && i < 30; ++i) { // There's a miniscule time period where we could potentially receive a bridge request and not have the registration ready when we launch DD // This is a stopgap Task delayTask = Task.CompletedTask; lock (bridgeHandlers) if (!bridgeHandlers.TryGetValue(parameters.AccessIdentifier, out bridgeHandler)) { delayTask = asyncDelayer.Delay(TimeSpan.FromMilliseconds(100), cancellationToken); } await delayTask.ConfigureAwait(false); } if (bridgeHandler == null) { lock (bridgeHandlers) if (!bridgeHandlers.TryGetValue(parameters.AccessIdentifier, out bridgeHandler)) { logger.LogWarning("Recieved invalid bridge request with accees identifier: {0}", parameters.AccessIdentifier); return(null); } } return(await bridgeHandler.ProcessBridgeRequest(parameters, cancellationToken).ConfigureAwait(false)); }
/// <inheritdoc /> public IBridgeRegistration RegisterHandler(IBridgeHandler bridgeHandler) { if (bridgeHandler == null) { throw new ArgumentNullException(nameof(bridgeHandler)); } var accessIdentifier = bridgeHandler.DMApiParameters.AccessIdentifier; lock (bridgeHandlers) { bridgeHandlers.Add(accessIdentifier, bridgeHandler); logger.LogTrace("Registered bridge handler: {0}", accessIdentifier); } return(new BridgeRegistration(() => { lock (bridgeHandlers) { bridgeHandlers.Remove(accessIdentifier); logger.LogTrace("Unregistered bridge handler: {0}", accessIdentifier); } })); }
/// <summary> /// Raises the <see cref="PushJavascript" /> event using provided arguments /// </summary> /// <param name="sender">The IBridgeHandler instance that raised the event</param> /// <param name="eventArgs">The arguments to be used to raise <see cref="PushJavascript" /> event</param> /// <returns>Returns the result of raising <see cref="PushJavascript" /> event</returns> protected virtual object OnPushJavascript(IBridgeHandler sender, PushJavascriptEventArgs eventArgs) { return(PushJavascript?.Invoke(this, eventArgs)); }