main.go (2102B)
1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 "io/ioutil" 8 "log" 9 "os" 10 "path" 11 12 testdataloader "github.com/peteole/testdata-loader" 13 14 "git.defalsify.org/vise.git/cache" 15 "git.defalsify.org/vise.git/engine" 16 "git.defalsify.org/vise.git/resource" 17 "git.defalsify.org/vise.git/state" 18 ) 19 20 var ( 21 baseDir = testdataloader.GetBasePath() 22 scriptDir = path.Join(baseDir, "examples", "session") 23 emptyResult = resource.Result{} 24 ) 25 26 func save(ctx context.Context, sym string, input []byte) (resource.Result, error) { 27 sessionId := ctx.Value("SessionId").(string) 28 sessionDir := path.Join(scriptDir, sessionId) 29 err := os.MkdirAll(sessionDir, 0700) 30 if err != nil { 31 return emptyResult, err 32 } 33 fp := path.Join(sessionDir, "data.txt") 34 if len(input) > 0 { 35 log.Printf("write data %s session %s", input, sessionId) 36 err = ioutil.WriteFile(fp, input, 0600) 37 if err != nil { 38 return emptyResult, err 39 } 40 } 41 r, err := ioutil.ReadFile(fp) 42 if err != nil { 43 err = ioutil.WriteFile(fp, []byte("(not set)"), 0600) 44 if err != nil { 45 return emptyResult, err 46 } 47 } 48 return resource.Result{ 49 Content: string(r), 50 }, nil 51 } 52 53 func main() { 54 var root string 55 var size uint 56 var sessionId string 57 flag.UintVar(&size, "s", 0, "max size of output") 58 flag.StringVar(&root, "root", "root", "entry point symbol") 59 flag.StringVar(&sessionId, "session-id", "default", "session id") 60 flag.Parse() 61 fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, scriptDir) 62 63 st := state.NewState(0) 64 rs := resource.NewFsResource(scriptDir) 65 rs.AddLocalFunc("do_save", save) 66 ca := cache.NewCache() 67 cfg := engine.Config{ 68 Root: "root", 69 SessionId: sessionId, 70 OutputSize: uint32(size), 71 } 72 ctx := context.Background() 73 ctx = context.WithValue(ctx, "SessionId", sessionId) 74 en := engine.NewEngine(ctx, cfg, &st, rs, ca) 75 var err error 76 _, err = en.Init(ctx) 77 if err != nil { 78 fmt.Fprintf(os.Stderr, "engine init fail: %v\n", err) 79 os.Exit(1) 80 } 81 err = engine.Loop(ctx, &en, os.Stdin, os.Stdout) 82 if err != nil { 83 fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err) 84 os.Exit(1) 85 } 86 }