shithub: chessfs

ref: 03a1f26a9e4fdd5c7ccaeae9c82e0af4b074db11
dir: /main.go/

View raw version
package main

import (
	"flag"
	"log"
	"os"
	"os/user"

	"github.com/knusbaum/go9p"
	"github.com/knusbaum/go9p/fs"
	// "github.com/knusbaum/go9p/proto"
)

func main() {
	srv := flag.String("srv", "chessfs", "server name")
	addr := flag.String("address", "", "serve over tcp")
	gname := flag.String("group", "", "group name, defaults to username")
	//	single := flag.Bool("single", false, "single-game filesystem")
	verbose := flag.Bool("verbose", false, "verbose")
	flag.Parse()

	if flag.NArg() > 0 {
		log.Printf("Extraneous arguments.")
		flag.Usage()
		os.Exit(1)
	}
	user, _ := user.Current()
	var group = user.Username
	if gname != nil {
		group = *gname
	}

	chessfs, _ := fs.NewFS(user.Name, user.Name, 0555)
	rootdir, ok := chessfs.Root.(fs.ModDir)
	if !ok {
		log.Fatal("root dir is not modifiable")
	}

	statctl := chessfs.NewStat("ctl", user.Username, group, 0600)
	statclone := chessfs.NewStat("clone", user.Username, group, 0440)
	statgames := chessfs.NewStat("games", user.Username, group, 0555)

	room := NewGameRoom(*verbose)
	gamedir := fs.NewStaticDir(statgames)

	rootdir.AddChild(NewCtlFile(room, statctl))
	rootdir.AddChild(NewCloneFile(room, statclone, chessfs, gamedir))
	rootdir.AddChild(gamedir)

	if *addr == "" {
		go9p.PostSrv(*srv, chessfs.Server())
	} else {
		go9p.Serve(*addr, chessfs.Server())
	}
}