public async Task <bool> StartStreamer(string twitterId, string clientId, string[] tracks)
        {
            var user = await _userDataManager.GetUserData(twitterId);

            if (user == null || tracks == null)
            {
                return(false);
            }

            var credentials = await _userDataManager.GetUserCredentials(twitterId);

            if (credentials == null || credentials.ValidUntil < DateTime.UtcNow)
            {
                //reroute for authentication
            }

            var userStream = new Models.TwitterUserStreams()
            {
                TwitterId     = twitterId,
                ClientId      = clientId,
                FilteredSteam = Tweetinvi.Stream.CreateFilteredStream(new Tweetinvi.Models.TwitterCredentials()
                {
                    AccessToken       = credentials.AccessToken,
                    AccessTokenSecret = credentials.AccessTokenSecret,
                    ConsumerKey       = _twitterConfigurations.ConsumerKey,
                    ConsumerSecret    = _twitterConfigurations.ConsumerSecret,
                })
            };

            var processCancellationTokenSource  = new CancellationTokenSource();
            CancellationToken cancellationToken = processCancellationTokenSource.Token;

            if (!(await _taskManager.TryUpdateClientStream(clientId, processCancellationTokenSource) == true))
            {
                return(false);
            }

            foreach (var track in tracks)
            {
                userStream.FilteredSteam.AddTrack(track);
            }

            var newTask = Task.Run(() =>
            {
                userStream.FilteredSteam.MatchingTweetReceived += (sender, args) =>
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        userStream?.FilteredSteam?.StopStream();
                        userStream = null;
                    }

                    _signalRcontext.Clients.Client(clientId).SendAsync("GetStream", "Linus", args.Tweet.FullText);
                };

                userStream.FilteredSteam.StartStreamMatchingAllConditionsAsync();
            }, cancellationToken);

            userStreams.Add(userStream);

            return(true);
        }