public Task Start()
{
_nmsDownloader.TrainDataRecieved += (src, feedData) =>
{
// run this as a task to return to callee quicker
Task.Run(() =>
{
dynamic evtData = JsonConvert.DeserializeObject<dynamic>(feedData.Data);
switch (feedData.FeedSource)
{
case Feed.TrainMovement:
Parallel.ForEach(_userManager.ActiveUsers
.Where(u => u.Value.State == UserContextState.SubscribeToFeed), uc => SendData(uc, evtData as IEnumerable<dynamic>));
Parallel.ForEach(_userManager.ActiveUsers
.Where(u => u.Value.State == UserContextState.SubscribeToStanox)
.Where(u => DataContainsStanox(evtData, u.Value.StateArgs)), uc => SendStanoxData(uc, evtData as IEnumerable<dynamic>));
break;
}
var eh = FeedDataRecieved;
if (null != eh)
eh(this, new FeedEventArgs(feedData.FeedSource, evtData));
}, _cancellationTokenSource.Token);
};
return Task.Run(() => _nmsDownloader.SubscribeToFeeds(), _cancellationTokenSource.Token);
}