initial chat server working
must send messages over javascript console for now
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
||||
"mcquay.me/chat"
|
||||
|
||||
"github.com/kelseyhightower/envconfig"
|
||||
"github.com/op/go-logging"
|
||||
)
|
||||
|
||||
const usage = "chatd"
|
||||
|
||||
type Config struct {
|
||||
Host string
|
||||
Port int
|
||||
Static string
|
||||
LogLevel int
|
||||
}
|
||||
|
||||
func main() {
|
||||
config := &Config{
|
||||
Host: "",
|
||||
Port: 8000,
|
||||
LogLevel: int(logging.DEBUG),
|
||||
}
|
||||
err := envconfig.Process("chat", config)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
format := logging.MustStringFormatter(chat.Format)
|
||||
be := logging.NewLogBackend(os.Stderr, "", 0)
|
||||
bef := logging.NewBackendFormatter(be, format)
|
||||
bel := logging.AddModuleLevel(bef)
|
||||
bel.SetLevel(logging.Level(config.LogLevel), "")
|
||||
logging.SetBackend(bel)
|
||||
logs := logging.MustGetLogger("root")
|
||||
|
||||
sigs := make(chan os.Signal, 1)
|
||||
signal.Notify(sigs, os.Interrupt, os.Kill)
|
||||
go func() {
|
||||
s := <-sigs
|
||||
logs.Fatalf("signal: %+v", s)
|
||||
os.Exit(1)
|
||||
}()
|
||||
|
||||
sm := http.NewServeMux()
|
||||
_, err = chat.NewChat(
|
||||
sm,
|
||||
config.Static,
|
||||
)
|
||||
if err != nil {
|
||||
logs.Fatalf("problem initializing chat server: %+v", err)
|
||||
}
|
||||
|
||||
hostname := "localhost"
|
||||
if config.Host == "" {
|
||||
hostname, err = os.Hostname()
|
||||
if err != nil {
|
||||
logs.Fatal("problem getting hostname:", err)
|
||||
}
|
||||
}
|
||||
logs.Debug("serving at: http://%s:%d/", hostname, config.Port)
|
||||
|
||||
addr := fmt.Sprintf("%s:%d", config.Host, config.Port)
|
||||
err = http.ListenAndServe(addr, sm)
|
||||
if err != nil {
|
||||
logs.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
package cmd
|
||||
Reference in New Issue
Block a user