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