You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
2.6 KiB
Go

10 years ago
package main
import (
"flag"
10 years ago
"fmt"
"log"
10 years ago
"math/rand"
"net"
10 years ago
"os"
10 years ago
"time"
10 years ago
)
var options struct {
lightSpeed float64
frameRate int
moneySigma float64
moneyMean float64
playerSpeed float64
bombSpeed float64
economic int
debug bool
speckPath string
}
10 years ago
var (
info_log *log.Logger
error_log *log.Logger
currentGame *Game
10 years ago
)
10 years ago
func log_error(template string, args ...interface{}) {
error_log.Printf(template, args...)
10 years ago
}
func log_info(template string, args ...interface{}) {
info_log.Printf(template, args...)
10 years ago
}
func bail(status int, template string, args ...interface{}) {
10 years ago
if status == 0 {
fmt.Fprintf(os.Stdout, template, args...)
} else {
fmt.Fprintf(os.Stderr, template, args...)
}
os.Exit(status)
10 years ago
}
10 years ago
func handleConnection(conn *Connection) {
defer conn.Close()
conn.Login()
conn.Respawn()
10 years ago
10 years ago
c := make(chan []string)
go conn.ReadLines(c)
10 years ago
10 years ago
for parts := range c {
if isCommand(parts[0]) {
runCommand(conn, parts[0], parts[1:]...)
continue
}
10 years ago
switch parts[0] {
case "quit":
return
default:
conn.Printf("hmm I'm not sure I know that one.\n")
10 years ago
}
10 years ago
10 years ago
}
}
10 years ago
func main() {
flag.Parse()
10 years ago
dbconnect()
10 years ago
rand.Seed(time.Now().UnixNano())
info_log = log.New(os.Stdout, "[INFO] ", 0)
error_log = log.New(os.Stderr, "[ERROR] ", 0)
10 years ago
10 years ago
setupDb()
setupCommands()
listener, err := net.Listen("tcp", ":9220")
if err != nil {
bail(E_No_Port, "unable to start server: %v", err)
}
go func() {
for {
log_info("starting new game")
currentGame = NewGame()
currentGame.Run()
}
}()
for {
conn, err := listener.Accept()
if err != nil {
log_error("error accepting connection: %v", err)
continue
}
10 years ago
go handleConnection(NewConnection(conn))
}
10 years ago
}
func init() {
flag.Float64Var(&options.lightSpeed, "light-speed", 0.01, "speed of light in parsecs per frame")
flag.IntVar(&options.frameRate, "frame-rate", 100, "frame rate, in frames per second")
flag.Float64Var(&options.playerSpeed, "player-speed", 0.8, "player travel speed, relative to C, the speed of light")
flag.Float64Var(&options.bombSpeed, "bomb-speed", 0.9, "bomb travel speed, relattive to C, the speed of light")
flag.IntVar(&options.economic, "economic", 25000, "amount of money needed to win economic victory")
flag.Float64Var(&options.moneyMean, "money-mean", 10000, "mean amount of money on a system")
flag.Float64Var(&options.moneySigma, "money-sigma", 1500, "standard deviation in money per system")
flag.BoolVar(&options.debug, "debug", false, "puts the game in debug mode")
flag.StringVar(&options.speckPath, "speck-path", "/projects/exo/expl.speck", "path to exoplanet speck file")
}