Example #1
0
        public static async Task <EnrollResult> Enroll(string studentId, List <ClassSchedule> schedules)
        {
            if (schedules == null || schedules.Count == 0)
            {
                return(null);
            }

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

            if (Server == null)
            {
                return(new EnrollResult(ResultCodes.Offline));
            }

            var request = new EnrollRequest()
            {
                StudentId      = studentId,
                ClassSchedules = schedules
            };

            EnrollResult result = null;

            NetworkComms.AppendGlobalIncomingPacketHandler <EnrollResult>(EnrollResult.GetHeader(),
                                                                          (h, c, i) =>
            {
                NetworkComms.RemoveGlobalIncomingPacketHandler(EnrollResult.GetHeader());
                result = i;
            });

            await request.Send(new IPEndPoint(IPAddress.Parse(Server.IP), Server.Port));

            //   foreach (var sched in schedules)
            //  {
            //       sched.Sent = true;
            //      await Db.Save(sched);
            //   }


            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(EnrollResult.GetHeader());
            return(new EnrollResult(ResultCodes.Timeout));
        }
Example #2
0
        public static void EnrollRequestHandler(PacketHeader packetheader, Connection connection, EnrollRequest incomingobject)
        {
            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 ep = new IPEndPoint(IPAddress.Parse(dev.IP), dev.Port);

            var req = Request.Cache.FirstOrDefault(x => x.StudentId == incomingobject.StudentId);

            if (req == null)
            {
                req = new Request()
                {
                    StudentId = incomingobject.StudentId,
                }
            }
            ;

            if (req.Status == Request.Statuses.Proccessing)
            {
                new EnrollResult(ResultCodes.Processing).Send(ep);
                return;
            }

            if (req.Status == Request.Statuses.Accepted)
            {
                new EnrollResult(ResultCodes.Enrolled).Send(ep);
                return;
            }

            req.DateSubmitted = DateTime.Now;
            req.Status        = Request.Statuses.Pending;
            req.ReceiptNumber = incomingobject.ReceiptNumber;
            req.Save();

            //RequestDetail.DeleteWhere(nameof(RequestDetail.RequestId),req.Id);

            foreach (var sched in incomingobject.ClassSchedules)
            {
                var detail = RequestDetail.Cache.FirstOrDefault(x => x.Schedule.Subject.Code == sched.SubjectCode) ?? new RequestDetail()
                {
                    RequestId  = req.Id,
                    ScheduleId = sched.ClassId,
                    Status     = Request.Statuses.Pending,
                };
                detail.Save();
            }

            var result = new EnrollResult(ResultCodes.Success)
            {
                QueueNumber = Request.Cache.Count(x => x.Status == Request.Statuses.Pending),
            };

            if (req.Status == Request.Statuses.Proccessing)
            {
                result.QueueNumber = 0;
            }

            result.Send(ep);
        }