func main() { flag.Parse() fmt.Println("Icarus Server") fmt.Println("-------------") disp := server.NewDispatcher(1024, client.RegisteredList()) go func() { log.Infof("Task Handler at %s", *flagTaskBind) mux := http.NewServeMux() mux.Handle("/", disp) panic(http.ListenAndServe(*flagTaskBind, mux)) }() // Start all tasks manager.InitManager() { tasks := manager.ListTasks() for _, task := range tasks { task.Start() } } log.Infof("API Handler at %s", *flagAPIBind) handler.InitHandler() var handler http.Handler = http.DefaultServeMux if *flagCORS { c := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, AllowedMethods: []string{"GET", "PUT", "POST", "PATCH", "DELETE"}, AllowedHeaders: []string{"*"}, AllowCredentials: true, }) handler = c.Handler(handler) } panic(http.ListenAndServe(*flagAPIBind, context.ClearHandler(handler))) }
func main() { flag.Parse() fmt.Println("Icarus Personal") fmt.Println("---------------") localListen := fmt.Sprintf(":%d", *flagPort) localUrl := fmt.Sprintf("http://127.0.0.1:%d", *flagPort) delay := 200 * time.Millisecond regList := client.RegisteredList() if len(regList) == 0 { log.Errorf("This personal icarus is running with no actual logic.\n") os.Exit(-1) } server.InitDefaultDispatcher() go func() { log.Infof("Launching local server on %s...", localListen) mux := http.NewServeMux() mux.Handle("/", server.DefaultDispatcher) panic(http.ListenAndServe(localListen, mux)) }() log.Infof("Launching local satellite on %s...", localUrl) satellite.SilentSatellite = true for i := 0; i < 8; i++ { go satellite.StandardSatellite(localUrl, delay) } var handler string if len(regList) > 1 { fmt.Printf("Select a handler in %v: ", regList) _, err := fmt.Scanf("%s", &handler) if err != nil { panic(err) } } else { handler = regList[0] } cli, err := client.GetHandle(handler) if err != nil { log.Errorf("Fatal error occured when getting handler %s: %s\n", handler, err.Error()) os.Exit(1) } time.Sleep(time.Second) var username, password string fmt.Printf("Username: "******"Password: "******"Fatal error occured when making user: %s\n", err.Error()) os.Exit(1) } courses, err := user.ListCourse() if err != nil { log.Errorf("Fatal error occured when retrieving courses: %s\n", err.Error()) os.Exit(1) } if len(courses) == 0 { log.Errorf("You have no courses to be supplemented.\n") os.Exit(1) } fmt.Printf("Select a course: \n") for k, v := range courses { fmt.Printf("%d) %s: %s\n", k, v.Name, v.Desc) } var idx int for { fmt.Printf("Choice (%d - %d): ", 0, len(courses)-1) _, err := fmt.Scanf("%d", &idx) if err != nil { fmt.Printf("Failed to read your choice: %s\n", err.Error()) } else if idx < 0 || idx >= len(courses) { fmt.Printf("Out of range.\n") } else { break } } course, err := client.MakeCourceByData(cli, courses[idx]) if err != nil { log.Errorf("Fatal error occured when making course: %s\n", err.Error()) os.Exit(1) } // Make task task := task.NewTask(user, []icarus.Course{course}) task.Start() // Wait for elected for { time.Sleep(2 * time.Second) stat := task.Statistics() if stat.Elected { os.Exit(0) } } }
// It's main's obligation to invoke this function. func InitDefaultDispatcher() { DefaultDispatcher = NewDispatcher(1024, client.RegisteredList()) }