Beispiel #1
0
        public bool Auth(string Username, string Password, int MaxThreads)
        {
            var pwd  = Helpers.Security.SHA1(Password);
            var user = (from u in DbContext.Users
                        where u.Username == Username &&
                        u.Password == pwd &&
                        u.RoleAsInt == (int)Entity.UserRole.Root
                        select u).SingleOrDefault();

            if (user != null)
            {
                user.Online = true;
                DbContext.SaveChanges();
                var    index = Online.FindIndex(x => x.Username == user.Username);
                Client client;
                if (index >= 0)
                {
                    Groups.Remove(Online[index].Token, Online[index].Username);
                    Online[index].Token = Context.ConnectionId;
                    Groups.Add(Context.ConnectionId, user.Username);
                    client = Online[index];
                }
                else
                {
                    client = new Client {
                        Token = Context.ConnectionId, Username = user.Username, MaxThreads = MaxThreads, CurrentThreads = 0
                    };
                    Online.Add(client);
                }
                Online = Online.Distinct().ToList();
                System.Threading.Tasks.Task.Factory.StartNew(() =>
                {
                    SignalR.CodeCombHub.context.Clients.Group("System Judge").onJudgerStatusChanged(new Models.View.Judger(user, client));
                });
                Groups.Add(Context.ConnectionId, user.Username);
                Clients.Group(user.Username).onMessage(String.Format("{0},欢迎您。您已经成功注册成为Code Comb评测机!", user.Username));
                var time         = DateTime.Now.AddMinutes(-5);
                var err_statuses = (from s in DbContext.Statuses
                                    where s.ResultAsInt == (int)Entity.JudgeResult.Pending ||
                                    (s.ResultAsInt == (int)Entity.JudgeResult.Running && s.Time < time)
                                    select s).ToList();
                foreach (var status in err_statuses)
                {
                    foreach (var jt in status.JudgeTasks.ToList())
                    {
                        var judgetask = new Judge.Models.JudgeTask(jt);
                        ThreadBusy(user.Username);
                        System.Threading.Tasks.Task.Factory.StartNew(() =>
                        {
                            SignalR.JudgeHub.context.Clients.Group(user.Username).Judge(judgetask);
                        });
                    }
                    status.Result = Entity.JudgeResult.Running;
                    DbContext.SaveChanges();
                    SignalR.CodeCombHub.context.Clients.All.onStatusCreated(new Models.View.Status(status));//推送新状态
                }
                return(true);
            }
            return(false);
        }
Beispiel #2
0
 public bool Auth(string Username, string Password, int MaxThreads)
 {
     var pwd = Helpers.Security.SHA1(Password);
     var user = (from u in DbContext.Users
                 where u.Username == Username
                 && u.Password == pwd
                 && u.RoleAsInt == (int)Entity.UserRole.Root
                 select u).SingleOrDefault();
     if (user != null)
     {
         user.Online = true;
         DbContext.SaveChanges();
         var index = Online.FindIndex(x => x.Username == user.Username);
         Client client;
         if (index >= 0)
         {
             Groups.Remove(Online[index].Token, Online[index].Username);
             Online[index].Token = Context.ConnectionId;
             Groups.Add(Context.ConnectionId, user.Username);
             client = Online[index];
         }
         else
         {
             client = new Client { Token = Context.ConnectionId, Username = user.Username, MaxThreads = MaxThreads, CurrentThreads = 0 };
             Online.Add(client);
         }
         Online = Online.Distinct().ToList();
         System.Threading.Tasks.Task.Factory.StartNew(() =>
         {
             SignalR.CodeCombHub.context.Clients.Group("System Judge").onJudgerStatusChanged(new Models.View.Judger(user, client));
         });
         Groups.Add(Context.ConnectionId, user.Username);
         Clients.Group(user.Username).onMessage(String.Format("{0},欢迎您。您已经成功注册成为Code Comb评测机!", user.Username));
         var time = DateTime.Now.AddMinutes(-5);
         var err_statuses = (from s in DbContext.Statuses
                    where s.ResultAsInt == (int)Entity.JudgeResult.Pending
                    || (s.ResultAsInt == (int)Entity.JudgeResult.Running && s.Time< time)
                    select s).ToList();
         foreach (var status in err_statuses)
         {
             foreach (var jt in status.JudgeTasks.ToList())
             {
                 var judgetask = new Judge.Models.JudgeTask(jt);
                 ThreadBusy(user.Username);
                 System.Threading.Tasks.Task.Factory.StartNew(() =>
                 {
                     SignalR.JudgeHub.context.Clients.Group(user.Username).Judge(judgetask);
                 });
             }
             status.Result = Entity.JudgeResult.Running;
             DbContext.SaveChanges();
             SignalR.CodeCombHub.context.Clients.All.onStatusCreated(new Models.View.Status(status));//推送新状态
         }
         return true;
     }
     return false;
 }