コード例 #1
0
        protected async override Task ExecuteJob(IJobExecutionContext context)
        {
            var socialAccounts = await GetTwitterSocialAccounts(context);

            foreach (var socialAccount in socialAccounts)
            {
                ITwitterAppService twitterAppService = DependencyResolver.Resolve <ITwitterAppService>();
                await twitterAppService.PullTweets(socialAccount);
            }
        }
コード例 #2
0
        protected async override Task ExecuteJob(IJobExecutionContext context)
        {
            ITwitterAppService twitterAppService = DependencyResolver.Resolve <ITwitterAppService>();

            SocialAccount socialAccount = await GetTwitterSocialAccount(context);

            // accoun may be disabed.
            if (socialAccount == null)
            {
                var siteSocicalAccount = context.JobDetail.GetCustomData <SiteSocialAccount>();
                if (siteSocicalAccount != null)
                {
                    SchedulerJob.RemoveRunningJob <TwitterUserStreamJob>(siteSocicalAccount.SiteId, siteSocicalAccount.TwitterUserId);
                }
                return;
            }

            var creds = new TwitterCredentials(AppSettings.TwitterConsumerKey, AppSettings.TwitterConsumerSecret,
                                               socialAccount.Token, socialAccount.TokenSecret);

            var stream = Stream.CreateUserStream(creds);

            stream.StreamIsReady += (sender, args) =>
            {
                Logger.Info($"Twitter User Stream is ready. JobKey = {context.JobDetail.Key}.");
            };

            stream.MessageReceived += async(sender, args) =>
            {
                if (socialAccount.IfConvertMessageToConversation)
                {
                    Auth.SetCredentials(creds);
                    await twitterAppService.ProcessDirectMessage(socialAccount, args.Message);
                }
            };

            stream.MessageSent += async(sender, args) =>
            {
                await Task.Delay(1000);

                if (socialAccount.IfConvertMessageToConversation)
                {
                    Auth.SetCredentials(creds);
                    await twitterAppService.ProcessDirectMessage(socialAccount, args.Message);
                }
            };

            stream.TweetCreatedByAnyone += async(sender, args) =>
            {
                await Task.Delay(1000);

                if (socialAccount.IfConvertTweetToConversation)
                {
                    Auth.SetCredentials(creds);
                    await twitterAppService.ProcessTweet(socialAccount, args.Tweet);
                }
            };

            stream.StreamStopped += (sender, args) =>
            {
                var exception          = args.Exception;
                var disconnectedMesage = args.DisconnectMessage;
                Logger.Error($"Twitter User Stream stopped. JobKey = {context.JobDetail.Key}. Disconnected Message = {disconnectedMesage}.", args.Exception);
            };

            await stream.StartStreamAsync();

            SchedulerJob.RemoveRunningJob <TwitterUserStreamJob>(socialAccount.SiteId, socialAccount.SocialUser.OriginalId);
        }