private void ProcessSessionTermination(SessionTerminationEvent @event)
        {
            SessionTerminated?.Invoke(@event);

            string      sessionId = @event.SessionId;
            VaspSession vaspSession;

            if (!_beneficiarySessionsDict.TryGetValue(sessionId, out var benSession))
            {
                if (!_originatorSessionsDict.TryGetValue(sessionId, out var origSession))
                {
                    return;
                }

                vaspSession = origSession;
                _originatorSessionsDict.TryRemove(sessionId, out _);
            }
            else
            {
                _beneficiarySessionsDict.TryRemove(sessionId, out _);
                vaspSession = benSession;
            }

            //TODO: Work on session life cycle
            try
            {
                vaspSession.Dispose();
            }
            finally
            {
            }
        }
Esempio n. 2
0
    async Task Terminate(SessionTerminated message)
    {
        _logger.LogInformation("Session {SessionId}: Terminated", message.SessionId);

        await _connection.Hub.InvokeAsync <string>("Terminate",
                                                   _groupOptions.Id,
                                                   message.SessionId);
    }
Esempio n. 3
0
        public void RemoveSession(ConnectionSessionId sessionId)
        {
            lock (currentSessions)
            {
                var sessionToRemove = GetSessionInfo(sessionId);
                currentSessions.Remove(sessionId);

                SessionTerminated?.Invoke(sessionToRemove);
            }
        }
Esempio n. 4
0
        void Terminate(SessionTerminated message)
        {
            Logger.Info("Session {0}: Terminated", message.SessionId);

            try
            {
                _hub.Invoke <string>("Terminate",
                                     _groupId,
                                     message.SessionId)
                .Wait();
            }
            catch (Exception exception)
            {
                Logger.Error(MaybeAggregateException(exception),
                             $"Session {message.SessionId}: Error sending request");
                throw;
            }
        }
        public void Dispose()
        {
            _cancellationTokenSource.Cancel();

            //TODO: Work on session life cycle

            var sessions = _beneficiarySessionsDict.Values.Cast <VaspSession>().Concat(_originatorSessionsDict.Values);

            foreach (var session in sessions)
            {
                bool isOriginator   = session is OriginatorSession;
                var  runningSession = session;
                runningSession
                .TerminateAsync(isOriginator ? TerminationMessage.TerminationMessageCode.SessionClosedTransferCancelledByOriginator
                        : TerminationMessage.TerminationMessageCode.SessionClosedTransferDeclinedByBeneficiaryVasp).Wait();
                runningSession.Wait();
            }

            //if (TransferDispatch != null)
            //    foreach (var d in TransferDispatch.GetInvocationList())
            //        TransferDispatch -= (d as Func<TransferDispatchMessage, TransferConfirmationMessage>);

            //if (TransferRequest != null)
            //    foreach (var d in TransferRequest.GetInvocationList())
            //        TransferRequest -= (d as Func<TransferRequestMessage, TransferReplyMessage>);

            if (SessionTerminated != null)
            {
                foreach (var d in SessionTerminated.GetInvocationList())
                {
                    SessionTerminated -= (d as SessionTermination);
                }
            }

            if (SessionCreated != null)
            {
                foreach (var d in SessionCreated.GetInvocationList())
                {
                    SessionCreated -= (d as SessionCreation);
                }
            }
        }
Esempio n. 6
0
        private void OnCommunicationService_SessionTerminated(object sender, SessionEventArgs e)
        {
            try
            {
                CheckSessionTerminatedActions(e.Session, e.SessionContract);

                SessionTerminated?.Invoke(e.SessionContract, e);

                sessionIdContractMapping.Remove(e.Session.SessionId);
            }
            catch (Exception ex)
            {
                if (logger != null)
                {
                    logger.Error(ex.ToString());
                }
                else
                {
                    Console.WriteLine(ex.ToString());
                }
            }
        }