Mercurial > mercurial > hgweb_rsearcher.cgi
diff go/client.go @ 0:d3b8cd5aeb70
make repo.
author | pyon@macmini |
---|---|
date | Sun, 30 Sep 2018 17:27:04 +0900 |
parents | |
children | eaa27e4ed5be |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/go/client.go Sun Sep 30 17:27:04 2018 +0900 @@ -0,0 +1,173 @@ +/* + client.go : client-program. + Version : 0.0 + Last Change: 2018-09-30 Sun 17:09:04. + + install to: rsearcher_root/ + + rsearcher_root/client.exe + + grsearcher.exe + + app.conf + + verup.bat + + auth.db ( temporary ) + + hhs.db ( temporary ) + + index.db ( 10 days ) + + image/*.png + + doc/ + + .cache/*.jpg ( temporary ) + + $ client.exe -r 192.168.0.1:3910 # get new release + $ client.exe -u 192.168.0.1:3910 # get new dbs + $ client.exe 192.168.0.1:3910 0800012345 20171231 # get images +*/ +package main + +import ( + "archive/tar" + "bytes" + "compress/gzip" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "net/http" + "os" + "path/filepath" + "regexp" + "time" +) + +func main() { + var upgrade = flag.Bool( "r", false, "" ) // get grsearcher.exe, client.exe + var update = flag.Bool( "u", false, "" ) // get auth.db, hhs.db, index.db(5day) + flag.Parse() + + if *upgrade { + if flag.NArg() != 1 { + fmt.Fprintf( os.Stderr, "no remote host.\n" ) + os.Exit( 1 ) + } + fmt.Println( "Getting grsearcher.exe..." ) + host := flag.Args()[0] + if _, err := get_file( host, "/release/grsearcher.exe", "grsearcher.exe" ); err != nil { + log.Fatal( err ) + } + fmt.Println( "Getting client.exe..." ) + if _, err := get_file( host, "/release/client.exe", "client1.exe" ); err != nil { + log.Fatal( err ) + } + os.Exit( 0 ) + } + + if *update { + if flag.NArg() != 1 { + fmt.Fprintf( os.Stderr, "no remote host.\n" ) + os.Exit( 1 ) + } + fmt.Println( "Getting auth.db..." ) + host := flag.Args()[0] + if _, err := get_file( host, "/db/auth.db", "auth.db" ); err != nil { + log.Fatal( err ) + } + fmt.Println( "Getting hhs.db..." ) + if _, err := get_file( host, "/db/hhs.db", "hhs.db" ); err != nil { + log.Fatal( err ) + } + + if time.Now().Day() % 10 == 0 { + fmt.Println( "Getting index.db..." ) + if _, err := get_file( host, "/db/index.db", "index.db" ); err != nil { + log.Fatal( err ) + } + } + os.Exit( 0 ) + } + + // main + if flag.NArg() != 3 { + fmt.Fprintf( os.Stderr, "bad argument.\n" ) + os.Exit( 1 ) + } + + host := flag.Args()[0] + h := flag.Args()[1] + d := flag.Args()[2] + + r, err := regexp.Compile( "^0[1238][0-9]{8}$" ) + if err != nil { + log.Fatal( err ) + } + m := r.FindString( h ) + if len( m ) == 0 { + fmt.Fprintf( os.Stderr, "bad hno.\n" ) + os.Exit( 1 ) + } + + rfile := "/images/" + d + "/" + h + ".tgz" + b, err := get_file( host, rfile, "" ) + if err != nil { + log.Fatal( err ) + } + if err := untgz_images( d, b ); err != nil { + log.Fatal( err ) + } +} + +/* Subroutines */ +// HTTP GET +func get_file( host, rfile, lfile string ) ( []byte, error ) { + res, err := http.Get( "http://" + host + "/" + rfile ) + if err != nil { + return nil, err + } + b, err := ioutil.ReadAll( res.Body ) + res.Body.Close() + if err != nil { + return nil, err + } + if lfile != "" { + if err := ioutil.WriteFile( lfile, b, 0644 ); err != nil { + return nil, err + } + return nil, nil + } + return b, nil +} + +// Un-Tar/Gzip +func untgz_images( d string, b []byte ) error { + br := bytes.NewReader( b ) + zr, err := gzip.NewReader( br ) + if err != nil { + return err + } + + tr := tar.NewReader( zr ) + for i := 1; ; i++ { + //hdr, err := tr.Next() + _, err := tr.Next() + if err == io.EOF { + break // End of archive + } + if err != nil { + return err + } + //f, _ := os.Create( hdr.Name ) + fn := fmt.Sprintf( "%s_%d.jpg", d, i ) + fn = fmt.Sprintf( "00000000_%d.jpg", i ) // for test + + fn = filepath.Join( ".cache", fn ) + f, _ := os.Create( fn ) + if _, err := io.Copy( f, tr ); err != nil { + return err + } + f.Close() + } + + if err := zr.Close(); err != nil { + return err + } + return nil +} +