Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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();
        }