示例#1
0
        private static void BeginInteractive(Server server)
        {
            new Thread(() =>
            {
                Thread.Sleep(300);
                while (true)
                {
                    Console.Clear();
                    Router.ListPossibleOperations();

                    var option = ConsolePrompts.ReadUntilValid(
                        prompt: "Codigo de operacion",
                        pattern: "^[0-9]+|(exit)$",
                        errorMsg: "Favor de ingresar un numero o exit");

                    if (option == "exit")
                    {
                        Process.GetCurrentProcess().Kill();
                    }

                    Router.RouteOperation(option, new object[] { server });
                    Console.WriteLine("Presiona enter para continuar");
                    Console.ReadKey();
                }
            }).Start();
        }
示例#2
0
        public void RemoveSubject()
        {
            Console.Clear();
            Console.WriteLine("Eliminacion de curso");
            Console.WriteLine("--------------------");
            Console.WriteLine("");

            var subjects = SubjectSrv.GetAllSubjects();

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No hay cursos registrados en el sistema");
                return;
            }

            ConsolePrompts.PrintListWithIndices(subjects.Select(s => s.Name));

            Console.WriteLine("");
            var option = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Numero de la materia a borrar",
                min: 1,
                max: subjects.Count());

            var subject = subjects.ElementAt(option - 1);

            SubjectSrv.RemoveSubject(subject.Id);
            Console.WriteLine("");
        }
示例#3
0
        public void EnrollInSubject()
        {
            Console.Clear();
            Console.WriteLine("Cargando...");
            Client.Send("03", "NOT_MINE");
            var subjects = Client.Receive <IEnumerable <Subject> >();

            Console.Clear();

            Console.WriteLine("Inscripciones");
            Console.WriteLine("-------------");
            Console.WriteLine("");

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No hay cursos a los que se pueda registrar");
                return;
            }

            ConsolePrompts.PrintListWithIndices(subjects.Select(s => s.Name));

            Console.WriteLine("");
            var option = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Numero de la materia a la que se quiere inscribir",
                min: 1,
                max: subjects.Count());

            Client.Send("04", subjects.ElementAt(option - 1).Id);
            Client.Receive();

            Console.WriteLine("Esta usted inscripto");
        }
示例#4
0
        public void GradeStudent()
        {
            Console.Clear();
            Console.WriteLine("Asistente de calificaciones");
            Console.WriteLine("---------------------------");
            Console.WriteLine("");

            var subjects = SubjectSrv.GetAllSubjects();

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No hay cursos registrados en el sistema");
                return;
            }

            Console.WriteLine("Materias disponibles");
            Console.WriteLine("");
            ConsolePrompts.PrintListWithIndices(subjects.Select(s => s.Name));

            Console.WriteLine("");
            var option = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Numero de la materia deseada",
                min: 1,
                max: subjects.Count());

            var subject  = subjects.ElementAt(option - 1);
            var students = StudentSrv.GetStudentsEnrolledInSubject(subject.Id);

            Console.WriteLine("");

            if (students.Count() == 0)
            {
                Console.WriteLine($"No hay estudiantes inscriptos a {subject.Name}");
                return;
            }

            Console.WriteLine("Estudiantes inscriptos");
            Console.WriteLine("");
            ConsolePrompts.PrintListWithIndices(students.Select(s => $"{s.LastName}, {s.FirstName} [{s.Id}]"));

            Console.WriteLine("");
            option = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Numero del estudiante",
                min: 1,
                max: subjects.Count());

            var student = students.ElementAt(option - 1);

            Console.WriteLine("");
            var grade = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Nota",
                min: 1,
                max: 100);

            StudentSrv.GradeStudent(student.Id, subject.Id, grade);
            Srv.SendNotification(student.Id, $"Has recibido una calificacion! Sacaste {grade} en {subject.Name}");
            Console.WriteLine("");
            Console.WriteLine($"Se notifico a {student.LastName}, {student.FirstName} que su nota para {subject.Name} fue {grade}");
        }
示例#5
0
        static void Main(string[] args)
        {
            Console.Clear();
            Console.WriteLine("Bienvenido a Gestion 3.0\nPresiona enter para conectarte...");
            Console.ReadKey();

            var client = new Client(GetValueFromConfig <string>("ip"), GetValueFromConfig <int>("port"));

            client.Connect(() =>
            {
                try
                {
                    AuthenticateAgainstServer(client);
                    var subscription = client.ListenToNotifications(Console.WriteLine);

                    while (true)
                    {
                        Console.Clear();
                        Router.ListPossibleOperations();

                        var option = ConsolePrompts.ReadUntilValid(
                            prompt: "Codigo de operacion",
                            pattern: "^[0-9]+|(exit)$",
                            errorMsg: "Favor de ingresar un numero o exit");

                        if (option == "exit")
                        {
                            break;
                        }

                        try
                        {
                            Router.RouteOperation(option, new object[] { client });
                        }
                        catch (OperationFailedException)
                        {
                            Console.WriteLine("Ha ocurrido un error, la operacion se ha cancelado");
                        }

                        Console.WriteLine("Presiona enter para continuar");
                        Console.ReadKey();
                    }

                    subscription.Unsubscribe();
                }
                catch (InvalidAuthException)
                {
                    Console.WriteLine("No pareces estar registrado, contacta a un admin!");
                    Console.WriteLine("Adios!");
                    Thread.Sleep(2000);
                }
                finally
                {
                    client.Dispose();
                }
            });
        }
示例#6
0
        public void ViewAvailableCourses()
        {
            Console.Clear();
            Console.WriteLine("Lista de cursos");
            Console.WriteLine("---------------");
            Console.WriteLine("");

            var subjects = SubjectSrv.GetAllSubjects();

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No hay cursos registrados en el sistema");
                return;
            }

            ConsolePrompts.PrintListWithIndices(subjects.Select(s => s.Name));
            Console.WriteLine("");
        }
示例#7
0
        public void UploadFileToCourse()
        {
            Console.Clear();
            Console.WriteLine("Cargando...");
            Client.Send("03", "MINE");
            var subjects = Client.Receive <IEnumerable <Subject> >();

            Console.Clear();

            Console.WriteLine("Lista de cursos disponibles");
            Console.WriteLine("---------------------------");
            Console.WriteLine("");

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No esta inscripto a ningun curso");
                return;
            }

            ConsolePrompts.PrintListWithIndices(subjects.Select(s => s.Name));

            Console.WriteLine("");
            var option = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Numero de la materia a la que quiere subir material",
                min: 1,
                max: subjects.Count());

            var subject = subjects.ElementAt(option - 1);

            Console.WriteLine($"El material sera subido a {subject.Name}");

            var path = ConsolePrompts.ChooseFile();

            Console.WriteLine("Su archivo esta siendo subido...");
            Client.SendFile("05", path);
            var fileRef = Client.Receive <FileRef>();

            Client.Send("06", Tuple.Create(subject.Id, fileRef));
            Client.Receive();

            Console.WriteLine("Archivo subido con exito!");
        }
示例#8
0
        public void RegisterSubject()
        {
            Console.Clear();
            Console.WriteLine("Registro de curso");
            Console.WriteLine("-----------------");
            Console.WriteLine("");

            var name = ConsolePrompts.ReadUntilValid(
                prompt: "Nombre",
                pattern: "^[a-zA-Z0-9 ]+$",
                errorMsg: "El nombre de la materia puede tener letras de la A a la Z, no importan mayusculas, numeros o espacios. No se aceptan otros caracteres");

            var subject = new Subject()
            {
                Name = name
            };

            SubjectSrv.RegisterSubject(subject);
            Console.WriteLine("");
        }
示例#9
0
        private static void AuthenticateAgainstServer(Client c)
        {
            try
            {
                var userId = ConsolePrompts.ReadUntilValid(
                    prompt: "Numero de estudiante",
                    pattern: "^[0-9]{6}$",
                    errorMsg: "Por favor, ingrese un numero de seis cifras. Complete con ceros a la izquierda de ser necesario.");

                c.Send("01", userId);
                var firstName = c.Receive();

                Console.WriteLine($"Hola {firstName}!");
                Thread.Sleep(1000);

                c.Authenticate(userId);
            }
            catch (OperationFailedException)
            {
                throw new InvalidAuthException();
            }
        }
示例#10
0
        public void ViewGrades()
        {
            Console.Clear();
            Console.WriteLine("Cargando...");
            Client.Send("07", "MINE");
            var grades = Client.Receive <IDictionary <string, int> >();

            Console.Clear();

            Console.WriteLine("Notas");
            Console.WriteLine("-----");
            Console.WriteLine("");

            if (grades.Count() == 0)
            {
                Console.WriteLine("No tienes ninguna nota aun");
                return;
            }

            ConsolePrompts.PrintListWithIndices(grades.Select(entry => $"{entry.Key} - {entry.Value}"));
            Console.WriteLine("");
        }
示例#11
0
        public void SignupStudent()
        {
            Console.Clear();
            Console.WriteLine("Registro de estudiante");
            Console.WriteLine("----------------------");
            Console.WriteLine("");

            var id = ConsolePrompts.ReadUntilValid(
                prompt: "Numero de estudiante",
                pattern: "^[0-9]{6}$",
                errorMsg: "Un numero de estudiante tiene solo seis numeros");
            var firstName = ConsolePrompts.ReadUntilValid(
                prompt: "Primer nombre",
                pattern: "^[a-zA-Z]+$",
                errorMsg: "Un nombre son letras de la A a la Z, no importan mayusculas. No se aceptan espacios ni ningun otro caracter");
            var lastName = ConsolePrompts.ReadUntilValid(
                prompt: "Primer apellido",
                pattern: "^[a-zA-Z]+$",
                errorMsg: "Un apellido son letras de la A a la Z, no importan mayusculas. No se aceptan espacios ni ningun otro caracter");

            var student = new Student()
            {
                Id        = id,
                FirstName = firstName,
                LastName  = lastName
            };

            Console.WriteLine("");

            try
            {
                StudentSrv.SignupStudent(student);
            }
            catch (DuplicateEntityException)
            {
                Console.WriteLine("Un estudiante con ese numero ya existe, cancelando la operacion...");
            }
        }
示例#12
0
        public void ViewAvailableCourses()
        {
            Console.Clear();
            Console.WriteLine("Cargando...");
            Client.Send("03", "ALL_WITH_STATUS");
            var subjects = Client.Receive <IDictionary <string, string> >();

            Console.Clear();

            Console.WriteLine("Lista de cursos disponibles");
            Console.WriteLine("---------------------------");
            Console.WriteLine("");

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No hay cursos registrados en el sistema");
                return;
            }

            ConsolePrompts.PrintListWithIndices(subjects.Select(s => $"{s.Key} ({s.Value})"));

            Console.WriteLine("");
        }
示例#13
0
        public void ViewUploadedFiles()
        {
            Console.Clear();
            Console.WriteLine("Cargando...");
            Client.Send("03", "MINE");
            var subjects = Client.Receive <IEnumerable <Subject> >();

            Console.Clear();

            Console.WriteLine("Lista de cursos disponibles");
            Console.WriteLine("---------------------------");
            Console.WriteLine("");

            if (subjects.Count() == 0)
            {
                Console.WriteLine("No esta inscripto a ningun curso");
                return;
            }

            ConsolePrompts.PrintListWithIndices(subjects.Select(s => s.Name));

            Console.WriteLine("");
            var option = ConsolePrompts.ReadNumberUntilValid(
                prompt: "Numero de la materia",
                min: 1,
                max: subjects.Count());

            var subject = subjects.ElementAt(option - 1);

            Client.Send("08", subject.Id);
            var files = Client.Receive <IEnumerable <FileRef> >();

            Console.WriteLine("");

            if (files.Count() == 0)
            {
                Console.WriteLine("No hay archivos suyos en este curso");
                Console.WriteLine("");
                return;
            }

            Console.WriteLine($"Archivos subidos a {subject.Name}");
            Console.WriteLine("-------------------------------------------");
            Console.WriteLine("");

            ConsolePrompts.PrintListWithIndices(files.Select(s => s.Name));

            while (true)
            {
                Console.WriteLine("");
                option = ConsolePrompts.ReadNumberUntilValid(
                    prompt: "Numero del archivo a descargar o 0 para salir",
                    min: 0,
                    max: files.Count());

                if (option == 0)
                {
                    return;
                }

                var fileRef = files.ElementAt(option - 1);
                Console.WriteLine("Descargando archivo...");
                Client.Send("09", fileRef.Path);
                var fileName = Client.ReceiveFile();
                Console.WriteLine($"{fileName} recibido con exito!");
                Console.WriteLine("");
            }
        }