/// <inheritdoc/>
        public override async Task Open(Runtime.Grpc.Interaction.OpenTunnel request, IServerStreamWriter <Runtime.Grpc.Interaction.CommittedEventStreamWithContext> responseStream, ServerCallContext context)
        {
            try
            {
                var tunnel         = new QuantumTunnel(_serializer, responseStream, context.CancellationToken, _logger);
                var application    = request.Application.ToConcept <Application>();
                var boundedContext = request.BoundedContext.ToConcept <BoundedContext>();
                var events         = request
                                     .Events
                                     .Select(@event => @event.ToArtifact())
                                     .ToArray();
                var tenantOffsets = request.Offsets.ToTenantOffsets();

                var subscription = new EventParticleSubscription(events);

                _logger.Information($"Opening up a quantum tunnel for bounded context '{boundedContext}' in application '{application}'");

                var singularity = new Singularity(application, boundedContext, tunnel, subscription);
                _eventHorizon.GravitateTowards(singularity, tenantOffsets);
                tunnel.Collapsed += qt => _eventHorizon.Collapse(singularity);

                await tunnel.Open(request.Offsets.ToTenantOffsets());

                _logger.Information($"Quantum tunnel collapsed for bounded context '{boundedContext}' in application '{application}'");
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Problems opening tunnel");
            }

            await Task.CompletedTask;
        }
        public void TestQuantumTunnel()
        {
            // NOTE - this fails due to floating point innacuracy with very small numbers...

            //Taken from University Physics example 40.7

            QuantumTunnel tunnel = new QuantumTunnel(new Energy(5, UniversityPhysics.Enums.EnergyMeasure.eV), new Energy(2, UniversityPhysics.Enums.EnergyMeasure.eV), 1E-9, Constants.Common.M_e);

            Assert.IsTrue(UniversityPhysics.Maths.MathsHelpers.WithinTolerance(tunnel.TunnelProbability, 7.1E-8));

            tunnel.BarrierWidth = 0.5E-9;

            Assert.IsTrue(UniversityPhysics.Maths.MathsHelpers.WithinTolerance(tunnel.TunnelProbability, 5.2E-4));
        }