83 lines
2.4 KiB
Go
83 lines
2.4 KiB
Go
package main
|
|
|
|
// main is the entrypoint for RadChat. It parses flags, prepares storage,
|
|
// configures middleware and routes, and starts the HTTP server. See README for
|
|
// the flag reference and architecture overview.
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"path/filepath"
|
|
"radchat/server"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
var ip = flag.String("ip", "localhost", "Server address (e.g., 192.168.1.1)")
|
|
var port = flag.Int("port", 8080, "Server port")
|
|
var bufSize = flag.Int("bufsize", 256, "Channel buffer size")
|
|
var gzipEnabled = flag.Bool("gzip-enable", false, "Enable gzip compression")
|
|
var cachingDisabled = flag.Bool("cache-disable", false, "Disable caching")
|
|
var filesDirectory = flag.String("files", "./files", "Directory to store upload files")
|
|
var filesTimeout = flag.Int("files-timeout", 3600, "File timeout in seconds")
|
|
var origin = flag.String("origin", "", "Origin to allow (e.g. example.com), leave blank to allow all")
|
|
var help = flag.Bool("help", false, "Show help")
|
|
|
|
flag.Parse()
|
|
|
|
if *help {
|
|
flag.PrintDefaults()
|
|
return
|
|
}
|
|
|
|
filesDir := filepath.Clean(*filesDirectory)
|
|
_ = DeleteDirContents(filesDir)
|
|
err := MakeDir(filesDir)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
address := fmt.Sprintf("%s:%d", *ip, *port)
|
|
|
|
hub := server.NewHub(*bufSize, server.Upgrader(*origin, *origin == ""))
|
|
go Run(hub)
|
|
|
|
mux := http.NewServeMux()
|
|
|
|
mux.HandleFunc("/files", func(w http.ResponseWriter, r *http.Request) {
|
|
HandleFileUpload(hub, filesDir, time.Duration(*filesTimeout)*time.Second, w, r)
|
|
})
|
|
|
|
mux.HandleFunc("/files/", func(w http.ResponseWriter, r *http.Request) {
|
|
HandleFileDownload(filesDir, w, r)
|
|
})
|
|
|
|
mux.HandleFunc("/user-count", func(w http.ResponseWriter, r *http.Request) {
|
|
HandleUserCountCheck(hub, w, r)
|
|
})
|
|
|
|
mux.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
|
|
HandleWebSocket(hub, w, r)
|
|
})
|
|
|
|
mux.HandleFunc("/check-username", func(w http.ResponseWriter, r *http.Request) {
|
|
HandleUsernameCheck(hub, w, r)
|
|
})
|
|
|
|
var middleware []func(http.Handler) http.Handler
|
|
|
|
if *cachingDisabled {
|
|
middleware = append(middleware, server.CacheDisableMiddleware)
|
|
}
|
|
if *gzipEnabled {
|
|
middleware = append(middleware, server.GzipMiddleware)
|
|
}
|
|
|
|
fileServer := http.FileServer(http.Dir("./static/"))
|
|
mux.Handle("/", server.MiddlewareChain(middleware...)(fileServer))
|
|
|
|
log.Printf("Voice chat server starting on %s...\n", address)
|
|
log.Fatal(http.ListenAndServe(address, mux))
|
|
}
|