package main import ( "fmt" "net" "os" "os/signal" "syscall" "ripple/datavisor" "ripple/server" "ripple/state" "ripple/transport" "ripple/udpr" ) func main() { if len(os.Args) == 3 && os.Args[1] == "init" { if err := datavisor.Init(os.Args[2]); err != nil { fmt.Println(err) return } fmt.Println("state initialized") return } td, err := transport.Load() if err != nil { fmt.Println(err) return } st, err := state.Load() if err != nil { fmt.Println(err) return } port := td.Storage.Port conn, err := udpr.ListenUDPR("udp", &net.UDPAddr{ IP: net.IPv4zero, Port: port, }) if err != nil { fmt.Println(err) return } sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) go func() { <-sigChan conn.Close() }() sockCh := make(chan server.UdpDatagram) go server.RunSocketLoop(conn, sockCh) serv := server.NewServer(sockCh, conn, td, st) fmt.Println("starting server loop") serv.Run() }