Пример #1
0
        protected async override Task ExecuteJob(IJobExecutionContext context)
        {
            var siteSocicalAccount = context.JobDetail.GetCustomData <SiteSocialAccount>();

            if (siteSocicalAccount == null)
            {
                return;
            }

            int    siteId         = siteSocicalAccount.SiteId;
            string facebookPageId = siteSocicalAccount.FacebookPageId;
            List <FacebookWebHookRawData> rawDataList = new List <FacebookWebHookRawData>();

            await UnitOfWorkManager.Run(TransactionScopeOption.Required, siteId, async() =>
            {
                SocialAccount account = await _socialAccountService.GetAccountAsync(SocialUserSource.Facebook, facebookPageId);
                if (account != null)
                {
                    rawDataList = _hookRawDataRepo.FindAll().Where(t => t.IsDeleted == false).OrderBy(t => t.CreatedTime).Take(50).ToList();

                    foreach (FacebookWebHookRawData rawData in rawDataList)
                    {
                        var data = Newtonsoft.Json.JsonConvert.DeserializeObject <FbHookData>(rawData.Data);
                        await _fbWebHookAppService.ProcessWebHookData(/*account, */ data);
                        _hookRawDataRepo.Delete(rawData);
                    }
                }
            });
        }
Пример #2
0
        /// <summary>
        /// This is call back url for facebook web hook.
        /// </summary>
        /// <returns></returns>
        public async Task <IHttpActionResult> Post()
        {
            var    request = Request;
            string fbEntry = await request.Content.ReadAsStringAsync();

            Hub.Clients.All.newRaw(fbEntry);

            lock (_lock)
            {
                if (_fbEntries.Contains(fbEntry))
                {
                    return(Ok()); //facebook will push duplicated data, we should ignore duplicated data.
                }

                _fbEntries.Add(fbEntry);
            }

            try
            {
                FbHookData data = await request.Content.ReadAsAsync <FbHookData>();

                await _facebookWebHookAppService.ProcessWebHookData(data);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                Hub.Clients.All.newRaw(ex.StackTrace);
            }

            lock (_lock)
            {
                _fbEntries.Remove(fbEntry);
            }

            return(Ok());
        }