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); }
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; }