Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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);
                }
            }));
        }
Exemplo n.º 3
0
 /// <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));
 }