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 async Task <GetWorkResult> GetNextWork(string username = "") { await FindServer(); if (Server == null) { return(new GetWorkResult(ResultCodes.Offline)); } var request = new GetWork(username); GetWorkResult result = null; NetworkComms.AppendGlobalIncomingPacketHandler <GetWorkResult>(GetWorkResult.GetHeader(), (h, c, i) => { NetworkComms.RemoveGlobalIncomingPacketHandler(GetWorkResult.GetHeader()); result = i; }); 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 TaskEx.Delay(TimeSpan.FromSeconds(1)); } Server = null; NetworkComms.RemoveGlobalIncomingPacketHandler(GetWorkResult.GetHeader()); return(new GetWorkResult(ResultCodes.Timeout)); }
public static async void GetWorkHandler(PacketHeader packetheader, Connection connection, GetWork req) { var ip = ((IPEndPoint)connection.ConnectionInfo.RemoteEndPoint).Address.ToString(); var client = Client.Cache.FirstOrDefault(x => x.IP == ip); if (!(client?.IsEnabled ?? false)) { Activity.Log( Activity.Categories.Network, Activity.Types.Warning, $"Work item requested at an unauthorized terminal ({ip})."); return; } if (client.Encoder == null) { return; } client.IsOnline = true; client.LastHeartBeat = DateTime.Now; TerminalLog.Add(client.Id, "Work item requested."); var work = Request.GetNextRequest(); if (work == null) { await new GetWorkResult(ResultCodes.NotFound).Send(new IPEndPoint(IPAddress.Parse(client.IP), client.Port)); return; } //work.Update(nameof(work.Status),Request.Statuses.Proccessing); work.Status = Request.Statuses.Proccessing; var student = Models.Student.Cache.FirstOrDefault(x => x.StudentId == work.StudentId); var result = new GetWorkResult(ResultCodes.Success) { RequestId = work.Id, StudentId = work.StudentId?.ToUpper(), StudentName = $"{student?.FirstName} {student?.LastName}", Student = new Student() { Address = student.Address, BirthDate = student.BirthDate, Course = student.Course.Acronym, CourseId = student.CourseId, FirstName = student.FirstName, LastName = student.LastName, Major = student.Major, Minor = student.Minor, Male = student.Sex == Sexes.Male, Id = student.Id, Scholarship = student.Scholarship, StudentId = student.StudentId, } }; var items = RequestDetail.Cache.Where(x => x.RequestId == work.Id).ToList(); foreach (var item in items) { var sched = Models.ClassSchedule.Cache.FirstOrDefault(x => x.Id == item.ScheduleId); result.ClassSchedules.Add(new ClassSchedule() { ClassId = item.ScheduleId, SubjectCode = item.Schedule.Subject.Code, Instructor = sched?.Instructor, Room = sched?.Room, Schedule = sched?.Description, }); } await result.Send(new IPEndPoint(IPAddress.Parse(client.IP), client.Port)); await SendEncoderUpdates(Client.Cache.ToList()); client.Encoder.StartWork(); }