private List<string> _roles; //Коллекция ролей пользователя. Служит для снижения нагрузки на базу данных при частых вызовах методов DataFeed() { _context = new EFDbContext(); operationContext = OperationContext.Current; operationContext.Channel.Opened += Channel_Opened; operationContext.Channel.Closed += Channel_Closed; info = new Info(); _uManager = new UManager(new UserStore<User>(new IdentityContext())); _user = _uManager.FindByName(operationContext.ServiceSecurityContext.PrimaryIdentity.Name); //Получаем текущего Identity пользователя var roles = _uManager.GetUserRoles(_user.Id); //Создадим список ролей пользователя к которым будем обращаться в методах для проверки, чтобы не загружать БД лишними запросами. _roles = roles.Select(r => r.Name).ToList(); _conCount = roles.Max(r => r.NumberOfThreads); //Установить максимальное количество потоков доступное из ролей данному пользователю _connector = GetAvialableConnector(); _connector.ValuesChanged += Level1Changed; _connector.MarketDepthsChanged += Level2Changed; _connector.NewNews += NewNews; _connector.Error += Error; Console.WriteLine("SID: {0} ", operationContext.Channel.SessionId); _listener = new Listener(operationContext); //Запускаем вторичные потоки для обработки исторических данных for (int i = 0; i < _conCount; i++) { new Task(_listener.CandlesQueueStart).Start(); } }
public Listener(OperationContext operationContext) { this.operationContext = operationContext; requestCandlesQueue = new Queue<RequestCandles>(); info = new Info(); IsRunned = true; }