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); } } }); }
/// <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()); }