示例#1
0
        public static async void StartEnrollmentHandler(PacketHeader packetheader, Connection connection, StartEnrollment req)
        {
            var dev = AndroidDevice.Cache.FirstOrDefault(
                d => d.IP == ((IPEndPoint)connection.ConnectionInfo.RemoteEndPoint).Address.ToString());

            //Maybe do not ignore this on production
            if (dev == null)
            {
                return;
            }

            var request = Models.Request.Cache.FirstOrDefault(x => x.ReceiptNumber?.ToLower() == req.Receipt.ToLower());

            if (request == null)
            {
                request = new Request()
                {
                    StudentId     = req.StudentId,
                    ReceiptNumber = req.Receipt,
                };
                await request.SaveAsync();
            }

            if (request.StudentId == req.StudentId)
            {
                var result = new StartEnrollmentResult()
                {
                    Success       = true,
                    TransactionId = request.Id,
                    Submitted     = request.Submitted,
                };

                foreach (var item in request.Details)
                {
                    result.ClassSchedules.Add(new ClassSchedule()
                    {
                        ClassId     = item.ScheduleId,
                        Enrolled    = Models.ClassSchedule.GetEnrolled(item.ScheduleId),
                        Instructor  = item.Schedule.Instructor,
                        Schedule    = item.Schedule.Description,
                        Room        = item.Schedule.Room,
                        Slots       = item.Schedule.Slots,
                        SubjectCode = item.Schedule.Subject.Code
                    });
                }

                await result.Send(new IPEndPoint(IPAddress.Parse(dev.IP), dev.Port));
            }
            else
            {
                await new StartEnrollmentResult()
                {
                    Success      = false,
                    ErrorMessage = "OR Number is already used"
                }.Send(new IPEndPoint(IPAddress.Parse(dev.IP), dev.Port));
            }
        }
示例#2
0
        private async Task <StartEnrollmentResult> _StartEnrollment(string receipt)
        {
            if (CurrentStudent == null)
            {
                return(null);
            }
            if (string.IsNullOrWhiteSpace(receipt))
            {
                return(null);
            }

            if (Server == null)
            {
                await FindServer();
            }

            if (Server == null)
            {
                return(null);
            }

            StartEnrollmentResult result = null;

            NetworkComms.AppendGlobalIncomingPacketHandler <StartEnrollmentResult>(StartEnrollmentResult.GetHeader(),
                                                                                   (h, c, i) =>
            {
                NetworkComms.RemoveGlobalIncomingPacketHandler(StartEnrollmentResult.GetHeader());
                ClassSchedules     = i.ClassSchedules;
                TransactionId      = i.TransactionId;
                EnrollmentCommited = i.Submitted;
                result             = i;
            });

            await new StartEnrollment()
            {
                Receipt   = receipt,
                StudentId = CurrentStudent.StudentId
            }.Send(new IPEndPoint(IPAddress.Parse(Server.IP), Server.Port));

            var start = DateTime.Now;

            while ((DateTime.Now - start).TotalSeconds < 17)
            {
                if (result != null)
                {
                    return(result);
                }
                await Task.Delay(TimeSpan.FromSeconds(1));
            }

            Server = null;
            NetworkComms.RemoveGlobalIncomingPacketHandler(StartEnrollmentResult.GetHeader());
            return(null);
        }