Exemplo n.º 1
0
        private async Task DoBeginOutboundTransit(InTransitAvatar transitAvatar)
        {
            Exception transitError = null;

            try
            {
                await BeginOutboundTransit(transitAvatar);
            }
            catch (Exception e)
            {
                var last = _lastError;
                if (last != null && (last.Item1 != transitAvatar.UserId || e.Message != last.Item2))
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while sending avatar {0}. {1}", transitAvatar.UserId, e);
                    _lastError = Tuple.Create(transitAvatar.UserId, e.Message);
                }

                try
                {
                    transitAvatar.Rollback();
                }
                catch (Exception er)
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while performing rollback of avatar that failed transit. {0}", er);
                }

                transitError = e;
            }

            if (transitError != null)
            {
                try
                {
                    await transitAvatar.TriggerOnTransitStageChanged(TransitStage.SendError, transitAvatar.RideOnPrims);
                }
                catch (Exception e)
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while triggering TransitStage.SendError. {0}", e);
                }

                RemoveInTransitAvatar(transitAvatar);

                throw new AvatarTransitException(transitError.Message, transitError);
            }
            else
            {
                try
                {
                    await transitAvatar.TriggerOnTransitStageChanged(TransitStage.SendCompletedSuccess, transitAvatar.RideOnPrims);
                }
                catch (Exception e)
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while triggering TransitStage.SendCompletedSuccess. {0}", e);
                }

                RemoveInTransitAvatar(transitAvatar);
            }
        }
Exemplo n.º 2
0
        private async Task DoBeginOutboundTransit(InTransitAvatar transitAvatar)
        {
            Exception transitError = null;
            try
            {
                await BeginOutboundTransit(transitAvatar);
            }
            catch (Exception e)
            {
                var last = _lastError;
                if (last != null && (last.Item1 != transitAvatar.UserId || e.Message != last.Item2))
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while sending avatar {0}. {1}", transitAvatar.UserId, e);
                    _lastError = Tuple.Create(transitAvatar.UserId, e.Message);
                }

                try
                {
                    transitAvatar.Rollback();
                }
                catch (Exception er)
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while performing rollback of avatar that failed transit. {0}", er);
                }

                transitError = e;
            }

            if (transitError != null)
            {
                try
                {
                    await transitAvatar.TriggerOnTransitStageChanged(TransitStage.SendError, transitAvatar.RideOnPrims);
                }
                catch (Exception e)
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while triggering TransitStage.SendError. {0}", e);
                }

                RemoveInTransitAvatar(transitAvatar);

                throw new AvatarTransitException(transitError.Message, transitError);
            }
            else
            {
                try
                {
                    await transitAvatar.TriggerOnTransitStageChanged(TransitStage.SendCompletedSuccess, transitAvatar.RideOnPrims);
                }
                catch (Exception e)
                {
                    _log.ErrorFormat("[TRANSITCONTROLLER]: Error while triggering TransitStage.SendCompletedSuccess. {0}", e);
                }

                RemoveInTransitAvatar(transitAvatar);
            }
        }