private async Task <StudentInfoResult> _GetStudentInfo(string studentId, string password) { if (Server == null) { await FindServer(); } if (Server == null) { return(null); } var request = new StudentInfoRequest() { StudentId = studentId, Password = password }; StudentInfoResult result = null; NetworkComms.AppendGlobalIncomingPacketHandler <StudentInfoResult>(StudentInfoResult.GetHeader(), (h, c, res) => { NetworkComms.RemoveGlobalIncomingPacketHandler(StudentInfoResult.GetHeader()); result = res; if (result?.Success ?? false) { CurrentStudent = res.Student; RequestStatus = res.RequestStatus; } }); await request.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(StudentInfoResult.GetHeader()); return(null); }
public static void Start() { if (_started) { return; } _started = true; NetworkComms.DisableLogging(); var serializer = DPSManager.GetDataSerializer <ProtobufSerializer>(); NetworkComms.DefaultSendReceiveOptions = new SendReceiveOptions(serializer, NetworkComms.DefaultSendReceiveOptions.DataProcessors, NetworkComms.DefaultSendReceiveOptions.Options); PeerDiscovery.EnableDiscoverable(PeerDiscovery.DiscoveryMethod.UDPBroadcast); NetworkComms.AppendGlobalIncomingPacketHandler <AndroidInfo>(AndroidInfo.GetHeader(), AndroidHandler.HandShakeHandler); NetworkComms.AppendGlobalIncomingPacketHandler <StudentInfoRequest>(StudentInfoRequest.GetHeader(), AndroidHandler.StudentInfoRequested); NetworkComms.AppendGlobalIncomingPacketHandler <EndPointInfo>(EndPointInfo.GetHeader(), HandShakeHandler); NetworkComms.AppendGlobalIncomingPacketHandler <GetWork>(GetWork.GetHeader(), GetWorkHandler); NetworkComms.AppendGlobalIncomingPacketHandler <Login>(Login.GetHeader(), LoginHandler); NetworkComms.AppendGlobalIncomingPacketHandler <Logout>(Logout.GetHeader(), LogoutHandler); NetworkComms.AppendGlobalIncomingPacketHandler <SchedulesRequest>(SchedulesRequest.GetHeader(), AndroidHandler.ScheduleRequestHandler); NetworkComms.AppendGlobalIncomingPacketHandler <EnrollRequest>(EnrollRequest.GetHeader(), AndroidHandler.EnrollRequestHandler); NetworkComms.AppendGlobalIncomingPacketHandler <RegisterStudent>(RegisterStudent.GetHeader(), AndroidHandler.RegisterStudentHandler); NetworkComms.AppendGlobalIncomingPacketHandler <SaveWork>(SaveWork.GetHeader(), SaveWorkHandler); NetworkComms.AppendGlobalIncomingPacketHandler <GetCourses>(GetCourses.GetHeader(), AndroidHandler.GetCoursesHandler); NetworkComms.AppendGlobalIncomingPacketHandler <GetCoursesDesktop>(GetCoursesDesktop.GetHeader(), GetCoursesHandler); NetworkComms.AppendGlobalIncomingPacketHandler <Pong>(Pong.GetHeader(), PongHandler); NetworkComms.AppendGlobalIncomingPacketHandler <EnrollStudent>(EnrollStudent.GetHeader(), EnrollStudentHandler); NetworkComms.AppendGlobalIncomingPacketHandler <StartEnrollment>(StartEnrollment.GetHeader(), AndroidHandler.StartEnrollmentHandler); NetworkComms.AppendGlobalIncomingPacketHandler <AddSchedule>(AddSchedule.GetHeader(), AndroidHandler.AddScheduleHandler); NetworkComms.AppendGlobalIncomingPacketHandler <CommitEnrollment>(CommitEnrollment.GetHeader(), AndroidHandler.CommitEnrollmentHandler); NetworkComms.AppendGlobalIncomingPacketHandler <StatusRequest>(StatusRequest.GetHeader(), AndroidHandler.StatusRequestHandler); NetworkComms.AppendGlobalIncomingPacketHandler <CancelEnrollment>(CancelEnrollment.GetHeader(), AndroidHandler.CancelEnrollmentHandler); // try // { Connection.StartListening(ConnectionType.UDP, new IPEndPoint(IPAddress.Any, 0), true); // } // catch (Exception e) // { // // } }
public static void StudentInfoRequested(PacketHeader packetheader, Connection connection, StudentInfoRequest incomingobject) { var result = new StudentInfoResult(); if (string.IsNullOrWhiteSpace(incomingobject.StudentId)) { return; } var student = Models.Student.Cache.FirstOrDefault(x => x.StudentId?.ToLower() == incomingobject.StudentId?.ToLower()); if (student == null) { result.Success = false; result.ErrorMessage = "Student ID does not exists. Please check and try again."; SendStudentInfoResult(result, connection); return; } if (string.IsNullOrEmpty(student.Password)) { student.Password = incomingobject.Password; } if (student.Password != incomingobject.Password) { result.Success = false; result.ErrorMessage = "Invalid password. Please try again."; SendStudentInfoResult(result, connection); return; } result.Success = true; result.Student = new Student() { Course = student.Course.Acronym, FirstName = student.FirstName, Id = student.Id, LastName = student.LastName, Picture = student.Picture, StudentId = student.StudentId, BirthDate = student.BirthDate, Male = student.Sex == Sexes.Male, Address = student.Address, Major = student.Major, Minor = student.Minor, Scholarship = student.Scholarship, }; var req = Models.Request.Cache.FirstOrDefault(x => x.StudentId.ToLower() == incomingobject.StudentId.ToLower()); if (req != null) { result.RequestStatus = new RequestStatus() { Id = req.Id, IsSubmitted = req.Submitted, QueueNumber = req.GetQueueNumber(), Receipt = req.ReceiptNumber }; } SendStudentInfoResult(result, connection); }