Пример #1
0
 private void OnSubscriptionFailed(SlackClientWrapper client, string externalAccountId, AggregateException exception)
 {
     Logger.GetLogger().Warn($"SlackEventManager: subscription fail for user {externalAccountId}. Exception - {exception}");
     lock (_locker)
     {
         foreach (var planId in client.SubscribedPlans)
         {
             _accountsByPlanId.Remove(planId);
         }
         _clientsByUserName.Remove(client.SlackData.Self.Name);
         client.Dispose();
     }
 }
Пример #2
0
 public Task Subscribe(AuthorizationToken token, Guid planId)
 {
     lock (_locker)
     {
         if (_disposed)
         {
             Logger.GetLogger().Warn($"SlackEventManager: can't subscribe to disposed object. User = {token.ExternalAccountId}, PlanId = {planId}");
             return(Task.FromResult(0));
         }
         Unsubscribe(planId);
         SlackClientWrapper client;
         var userName = token.ExternalAccountId;
         if (!_clientsByUserName.TryGetValue(userName, out client))
         {
             Logger.GetLogger().Info($"SlackEventManager: creating new subscription and opening socket for user {token.ExternalAccountId}");
             //This user doesn't have subscription yet - create a new subscription
             client = new SlackClientWrapper(token.Token, userName);
             client.MessageReceived += OnMessageReceived;
             _clientsByUserName.Add(userName, client);
         }
         else
         {
             Logger.GetLogger().Info($"SlackEventManager: client for user {token.ExternalAccountId} already exists");
         }
         Logger.GetLogger().Info($"SlackEventManager: subscribing Plan {planId} to events from user {token.ExternalAccountId}");
         client.Subscribe(planId);
         _accountsByPlanId[planId] = userName;
         var result = client.Connect();
         result.ContinueWith(x => { if (x.IsFaulted)
                                    {
                                        OnSubscriptionFailed(client, token.ExternalAccountId, x.Exception);
                                    }
                             }, TaskContinuationOptions.OnlyOnFaulted);
         return(result);
     }
 }