public LinkTokenResponse GetLinkToken() { LinkTokenResponse linkTokenResponse = null; try { LinkTokenParam obj = new LinkTokenParam(); obj.ClientId = ClientId; obj.Secret = Secret; obj.ClientName = "Plaid App"; obj.User = new User { ClientUserId = "test_user" }; obj.Products = new string[] { "auth" }; obj.CountryCodes = new string[] { "GB", "US" }; obj.Language = "en"; IRestResponse response = RestCall(string.Format("{0}/link/token/create", ApiUrl), obj); linkTokenResponse = JsonConvert.DeserializeObject <LinkTokenResponse>(response.Content); } catch (Exception ex) { } return(linkTokenResponse); }
public ActionResult Connection() { if (Session["LoginDtl"] != null) { tblUser loginDtl = (tblUser)Session["LoginDtl"]; } if (Session["LinkToken"] != null) { ViewBag.LinkToken = Session["LinkToken"]; } else { LinkTokenResponse linkResponse = null; linkResponse = helper.GetLinkToken(); if (linkResponse != null) { ViewBag.LinkToken = linkResponse.LinkToken; Session["LinkToken"] = linkResponse.LinkToken; } } using (PlaidEntities DB = new PlaidEntities()) { List <tblInstance> Instances = DB.tblInstances.Select(x => x).ToList <tblInstance>(); return(View(Instances)); } }
public ActionResult Connection() { tblUser loginDtl = null; if (Session["LoginDtl"] != null) { loginDtl = (tblUser)Session["LoginDtl"]; } if (Session["LinkToken"] != null) { ViewBag.LinkToken = Session["LinkToken"]; } else { LinkTokenResponse linkResponse = null; linkResponse = helper.GetLinkToken(); if (linkResponse != null) { ViewBag.LinkToken = linkResponse.LinkToken; Session["LinkToken"] = linkResponse.LinkToken; } } using (PlaidEntities DB = new PlaidEntities()) { var instanceCollection = DB.tblInstances.Where(item => item.UserId == loginDtl.Id).Select(instance => new { instance.ConnectionId, instance.InstanceId, instance.InstanceName, AccessToken = instance.AccessToken.Trim() }).AsEnumerable().Select(x => new { ConnectionId = x.ConnectionId, InstanceId = x.InstanceId, InstanceName = x.InstanceName, AccessToken = Base64Decode(x.AccessToken.ToString()) }); if (instanceCollection?.Count() > 0) { int index = 0; Task <KeyValuePair <string, List <HoldingDisplay> > >[] concurrentTasks = new Task <KeyValuePair <string, List <HoldingDisplay> > > [instanceCollection.Count()]; foreach (var instance in instanceCollection) { concurrentTasks[index] = Task.Run(() => GetHoldingResponse(instance.AccessToken)); index++; if (index == instanceCollection.Count()) { break; } } try { Task.WaitAll(concurrentTasks); if (concurrentTasks != null) { ConcurrentDictionary <string, List <HoldingDisplay> > allThreadSafeHoldings = new ConcurrentDictionary <string, List <HoldingDisplay> >(); Parallel.ForEach(concurrentTasks, (task) => { if (task != null && task.IsCompleted && !task.IsFaulted && !task.IsCanceled && task.Status == TaskStatus.RanToCompletion) { KeyValuePair <string, List <HoldingDisplay> > keyValuePair = task.Result; allThreadSafeHoldings.TryAdd(keyValuePair.Key, keyValuePair.Value); } }); if (allThreadSafeHoldings?.Count > 0) { List <HoldingDisplayExt> allHoldings = (from eachKeyValuePair in allThreadSafeHoldings where eachKeyValuePair.Value?.Count > 0 from value in eachKeyValuePair.Value select new HoldingDisplayExt(value) { ConnectionId = instanceCollection.First(o => o.AccessToken.Equals(eachKeyValuePair.Key)).ConnectionId, InstanceId = instanceCollection.First(o => o.AccessToken.Equals(eachKeyValuePair.Key)).InstanceId, InstanceName = instanceCollection.First(o => o.AccessToken.Equals(eachKeyValuePair.Key)).InstanceName, }) .ToList(); ViewBag.ClientId = ClientId; ViewBag.Secret = Secret; ViewBag.ApiUrl = ApiUrl; ViewBag.LinkToken = Session["LinkToken"]; ViewBag.InstanceCollection = instanceCollection; return(View("holding", allHoldings)); //return View("holding", allHoldings.OrderByDescending(o => o.ConnectionId)); } else { TempData["error"] = "Error occurred to process all holding data simultaneously."; return(View("holding", null)); } } else { TempData["error"] = "Error occurred to get all holding data simultaneously."; return(View("holding", null)); } } catch (System.AggregateException agEx) { if (agEx.InnerExceptions?.Count > 0) { TempData["error"] = agEx.Flatten().Message; } return(View("holding", null)); } catch (System.Exception ex) { TempData["error"] = ex.Message; return(View("holding", null)); } } else { TempData["error"] = "No instance(s) found in DB."; return(View("holding", null)); } } }