74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"main/mvc/controllers"
|
|
controllers_pages "main/mvc/controllers/pages"
|
|
"main/mvc/models"
|
|
"main/tools"
|
|
"net/http"
|
|
)
|
|
|
|
func main() {
|
|
var app *models.App
|
|
var err error
|
|
|
|
// Инициализация приложения
|
|
if app, err = models.AppInit("config.json"); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Добавление префикса в виде домена сервера к записям в лог
|
|
log.SetPrefix(fmt.Sprintf("%s | ", app.Config.ServerDomain))
|
|
|
|
// Настройка маршрутов и запуск
|
|
if setupRoutesAndRun(app) != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func setupRoutesAndRun(a *models.App) error {
|
|
// Настройка маршрутов
|
|
router := setupRoutes(a)
|
|
|
|
// Запуск сервера
|
|
if ok, err := tools.IsIPInUse(a.Config.ServerIP); err != nil {
|
|
return err
|
|
} else if ok {
|
|
runServer(a.Config.ServerIP, a.Config.Port, router)
|
|
} else {
|
|
runServer(a.Config.LocalIP, a.Config.Port, router)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Настраивает маршруты
|
|
func setupRoutes(a *models.App) *http.ServeMux {
|
|
router := http.NewServeMux()
|
|
|
|
// Цепочка обработчиков, которые сработают до отдачи страницы юзеру
|
|
m := controllers.MiddlewaresChain
|
|
|
|
// Обработка статических файлов
|
|
router.Handle(a.Config.AssetsPath, m(controllers.StaticHandler()))
|
|
|
|
// Странички
|
|
{
|
|
// Обработка главной страницы (русская версия)
|
|
router.Handle("/ru/", m(controllers_pages.MainRuPageHandler(a)))
|
|
// Обработка главной страницы
|
|
router.Handle("/", m(controllers_pages.MainPageHandler(a)))
|
|
}
|
|
|
|
return router
|
|
}
|
|
|
|
// Запускает сервер на указанном IP, PORT
|
|
func runServer(ip, port string, router http.Handler) {
|
|
addr := ip + port
|
|
log.Println("Run on", addr)
|
|
log.Fatal(http.ListenAndServe(addr, router))
|
|
}
|