1
0
Fork 0
forked from External/grumble

Better defaults handling + better Windows compat.

This commit is contained in:
Mikkel Krautz 2011-05-16 22:58:23 +02:00
parent 2cf093160b
commit fea87b0c13
2 changed files with 47 additions and 31 deletions

4
ctl.go
View file

@ -6,8 +6,6 @@ package main
import ( import (
"log" "log"
"os"
"path/filepath"
"rpc" "rpc"
"strconv" "strconv"
) )
@ -40,7 +38,7 @@ func GrumbleCtl(args []string) {
sid, _ := strconv.Atoi64(args[1]) sid, _ := strconv.Atoi64(args[1])
client, err := rpc.Dial("unix", filepath.Join(os.Getenv("HOME"), ".grumble", "ctl")) client, err := rpc.Dial(*ctlnet, *ctladdr)
if err != nil { if err != nil {
log.Fatalf("Could not connect to control socket: %v", err) log.Fatalf("Could not connect to control socket: %v", err)
} }

View file

@ -16,13 +16,45 @@ import (
"path/filepath" "path/filepath"
"regexp" "regexp"
"rpc" "rpc"
"runtime"
"time" "time"
) )
func defaultGrumbleDir() string {
dirname := ".grumble"
if runtime.GOOS == "windows" {
dirname = "grumble"
}
return filepath.Join(os.Getenv("HOME"), dirname)
}
func defaultDataDir() string {
return filepath.Join(defaultGrumbleDir(), "data")
}
func defaultBlobDir() string {
return filepath.Join(defaultGrumbleDir(), "blob")
}
func defaultCtlNet() string {
if runtime.GOOS == "windows" {
return "tcp"
}
return "unix"
}
func defaultCtlAddr() string {
if runtime.GOOS == "windows" {
return "localhost:5454"
}
return filepath.Join(defaultGrumbleDir(), ".ctl")
}
var help *bool = flag.Bool("help", false, "Show this help") var help *bool = flag.Bool("help", false, "Show this help")
var datadir *string = flag.String("datadir", "", "Directory to use for server storage") var datadir *string = flag.String("datadir", defaultDataDir(), "Directory to use for server storage")
var blobdir *string = flag.String("blobdir", "", "Directory to use for blob storage") var blobdir *string = flag.String("blobdir", defaultBlobDir(), "Directory to use for blob storage")
var ctlpath *string = flag.String("ctlpath", "", "File to use for ctl socket") var ctlnet *string = flag.String("ctlnet", defaultCtlNet(), "Network to use for ctl socket")
var ctladdr *string = flag.String("ctladdr", defaultCtlAddr(), "Address to use for ctl socket")
var sqlitedb *string = flag.String("murmurdb", "", "Path to murmur.sqlite to import server structure from") var sqlitedb *string = flag.String("murmurdb", "", "Path to murmur.sqlite to import server structure from")
var cleanup *bool = flag.Bool("clean", false, "Clean up existing data dir content before importing Murmur data") var cleanup *bool = flag.Bool("clean", false, "Clean up existing data dir content before importing Murmur data")
var gencert *bool = flag.Bool("gencert", false, "Generate a self-signed certificate for use with Grumble") var gencert *bool = flag.Bool("gencert", false, "Generate a self-signed certificate for use with Grumble")
@ -31,6 +63,7 @@ var servers map[int64]*Server
func Usage() { func Usage() {
fmt.Fprintf(os.Stderr, "usage: grumble [options]\n") fmt.Fprintf(os.Stderr, "usage: grumble [options]\n")
fmt.Fprintf(os.Stderr, "remote control: grumble [options] ctl [ctlopts]\n")
flag.PrintDefaults() flag.PrintDefaults()
} }
@ -74,33 +107,22 @@ func MurmurImport(filename string) (err os.Error) {
func main() { func main() {
var err os.Error var err os.Error
if len(os.Args) >= 2 && os.Args[1] == "ctl" {
GrumbleCtl(os.Args[2:])
return
}
flag.Parse() flag.Parse()
if *help == true { if *help == true {
Usage() Usage()
return return
} }
for i, str := range os.Args {
if str == "ctl" {
GrumbleCtl(os.Args[i+1:])
return
}
}
log.SetPrefix("[G] ") log.SetPrefix("[G] ")
log.Printf("Grumble - Mumble server written in Go") log.Printf("Grumble - Mumble server written in Go")
if len(*datadir) == 0 {
*datadir = filepath.Join(os.Getenv("HOME"), ".grumble", "data")
}
log.Printf("Using data directory: %s", *datadir)
if len(*blobdir) == 0 {
*blobdir = filepath.Join(os.Getenv("HOME"), ".grumble", "blob")
}
if len(*ctlpath) == 0 {
*ctlpath = filepath.Join(os.Getenv("HOME"), ".grumble", "ctl")
}
log.Printf("Using blob directory: %s", *blobdir) log.Printf("Using blob directory: %s", *blobdir)
err = blobstore.Open(*blobdir, true) err = blobstore.Open(*blobdir, true)
if err != nil { if err != nil {
@ -197,14 +219,10 @@ func main() {
go s.ListenAndMurmur() go s.ListenAndMurmur()
} }
os.Remove(*ctlpath) if *ctlnet == "unix" {
os.Remove(*ctladdr)
addr, err := net.ResolveUnixAddr("unix", *ctlpath)
if err != nil {
log.Panicf("Unable to resolve ctl addr: %v", err)
} }
lis, err := net.Listen(*ctlnet, *ctladdr)
lis, err := net.ListenUnix("unix", addr)
if err != nil { if err != nil {
log.Panicf("Unable to listen on ctl socket: %v", err) log.Panicf("Unable to listen on ctl socket: %v", err)
} }