示例#1
0
 public CustomIdentityUser GetFirstFreeUser(DateTime CallStart, int Tm, int Td, IHubContext <IncomingHub> hubContext)
 {
     lock (_locker)
     {
         //актуализируем статусы всех пользователей(могут теоретически сбиться при внезапном отключении например)
         var users = _repo.GetAllUsers();
         using (RequestManager rm = new RequestManager())
         {
             foreach (var user in users)
             {
                 if (rm.HasAssignedRequest(user.Id))
                 {
                     if (user.IsFree)
                     {
                         _repo.UpdateIsFreeStatus(user, false);
                         if (user.IsLoggedIn)
                         {
                             hubContext.Clients.All.SendAsync("UserUpdate",
                                                              JsonConvert.SerializeObject(new { id = user.Id, state = (int)UserState.Busy }));
                         }
                         else
                         {
                             hubContext.Clients.All.SendAsync("UserUpdate",
                                                              JsonConvert.SerializeObject(new { id = user.Id, state = (int)UserState.NotLoggedIn }));
                         }
                     }
                 }
                 else
                 {
                     if (!user.IsFree)
                     {
                         _repo.UpdateIsFreeStatus(user, true);
                         if (user.IsLoggedIn)
                         {
                             hubContext.Clients.All.SendAsync("UserUpdate",
                                                              JsonConvert.SerializeObject(new { id = user.Id, state = (int)UserState.Free }));
                         }
                         else
                         {
                             hubContext.Clients.All.SendAsync("UserUpdate",
                                                              JsonConvert.SerializeObject(new { id = user.Id, state = (int)UserState.NotLoggedIn }));
                         }
                     }
                 }
             }
         }
         //while (true)
         {
             var retv = _repo.GetFirstFreeUser(CallStart, Tm, Td);
             if (retv != null)
             {
                 _repo.UpdateIsFreeStatus(retv, false);
                 hubContext.Clients.All.SendAsync("UserUpdate",
                                                  JsonConvert.SerializeObject(new { id = retv.Id, state = (int)UserState.Busy }));
                 ////Проверяем наличие необработанных запросов
                 //using (RequestManager rm = new RequestManager())
                 //{
                 //    if (rm.HasAssignedRequest(retv.Id))
                 //    {
                 //        continue;
                 //    }
                 //}
             }
             return(retv);
         }
     }
 }