public string GenerateAttendanceCode([FromBody] RequestAttendanceCodeDTO request) { bool isCodeUnique = false; string attendanceCode = ""; while (!isCodeUnique) //Ensures the uniqueness of a generated code { attendanceCode = AttendanceCodeGenerator.GenerateAttendanceCode(); //Generates the code if (AttendanceCodeComparer.CheckCodeUniqueness(_activeAttendanceCodes, attendanceCode)) { isCodeUnique = true; } } //Stores the code in memory ActiveAttendanceCode activateCode = new ActiveAttendanceCode(_activeAttendanceCodes, attendanceCode, request); return(activateCode.AttendanceCode); }
/// <summary> /// Initializes a new instance of ActiveAttendanceCode and sets its lifetime to 10 min. /// </summary> /// <param name="queue">An external ConcurrentQueue used to store the active codes</param> /// <param name="attendanceCode">The active code to be stored in the provided ConcurrentQueue</param> /// <param name="request">Information used to request the attendanceCode</param> public ActiveAttendanceCode(ConcurrentQueue <ActiveAttendanceCode> queue, string attendanceCode, RequestAttendanceCodeDTO request) { _queue = queue; _attendanceCode = attendanceCode; _teacherId = request.TeacherId; _subject = request.Subject; _classes = request.Classes; request.Modules.ForEach(module => _modules.Add(new Module(module))); if (request.Coordinates != null) { _coordinates = new Coordinates(request.Coordinates); } _numberOfStudents = request.NumberOfStudents; _duration = new CodeDuration(request.Duration); queue.Enqueue(this); _timer.Interval = _duration.Minutes * 60000;//Converts the duration from minutes to milliseconds and sets the timer. //DeleteFromActiveCodes is called when the timer expires _timer.Elapsed += new ElapsedEventHandler(DeleteFromActiveCodes); _timer.Start(); }