diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..211479d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +classes +main diff --git a/500.html b/500.html new file mode 100644 index 0000000..8159b68 --- /dev/null +++ b/500.html @@ -0,0 +1,34 @@ + + + + +
+ + + +Произошла внутренняя ошибка сервера при открытии данной страницы. Попробуйте повторить свой запрос позже.
+ + + diff --git a/main.go b/main.go index e5c166a..4f26509 100644 --- a/main.go +++ b/main.go @@ -36,6 +36,7 @@ import ( var schedFileRWMutex sync.RWMutex var classesRWMutexes map[string]*sync.RWMutex var classesNames []string +var error500Text []byte func isValidClass(class string) bool { for i := 0; i < len(classesNames); i++ { @@ -122,12 +123,14 @@ func respondWithFile(writer http.ResponseWriter, filename string) { file, err := os.Open(filename) if err != nil { writer.WriteHeader(http.StatusInternalServerError) + writer.Write(error500Text) return } stat, err := file.Stat() if err != nil { writer.WriteHeader(http.StatusInternalServerError) + writer.Write(error500Text) file.Close() return } @@ -136,6 +139,7 @@ func respondWithFile(writer http.ResponseWriter, filename string) { _, err = file.Read(buffer); if err != nil { writer.WriteHeader(http.StatusInternalServerError) + writer.Write(error500Text) file.Close() return } @@ -328,7 +332,7 @@ func handleEditPage(writer http.ResponseWriter, request *http.Request) { respondWithFile(writer, "editpage.html") } } -/* TODO: в эту и похожие функции нужно добавть возможность отправить статус 500 */ + func handleSchedule(writer http.ResponseWriter, request *http.Request) { respondWithFile(writer, "schedule.html") } @@ -371,12 +375,36 @@ func handleScheduleGet(writer http.ResponseWriter, request *http.Request) { schedFile.Close() } +// TODO: Переформатировать эту функцию. func main() { + var err error + + error500File, err := os.Open("500.html") + if err != nil { + fmt.Printf("[!!!]Не удалось открыть файл 500.html.\n") + return + } + + error500FileStat, err := error500File.Stat() + if err != nil { + error500File.Close() + fmt.Printf("[!!!]Не удалось прочитать информацию о файле 500.html.\n") + return + } + error500Text = make([]byte, error500FileStat.Size()) + + _, err = error500File.Read(error500Text); + if err != nil { + error500File.Close() + fmt.Printf("[!!!]Не удалось прочитать файл 500.html.\n") + return + } + error500File.Close() + classesRWMutexes = make(map[string]*sync.RWMutex) var classesDir *os.File var classes []os.DirEntry - var err error classesDir, err = os.Open("classes") if err != nil {