Mercurial > mercurial > hgweb_rsearcher.cgi
view go/client.go @ 3:db4813125eb8
many changes.
author | pyon@macmini |
---|---|
date | Thu, 11 Oct 2018 22:11:09 +0900 |
parents | eaa27e4ed5be |
children | 06342fc544e4 |
line wrap: on
line source
/* client.go : client-program. Version : 1.0a Last Change: 2018-10-03 水 13:44:11. 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, *.jpg + 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.Print( "Getting grsearcher.exe..." ) host := flag.Args()[0] if _, err := get_file( host, "/release/grsearcher.exe", "grsearcher.exe" ); err != nil { log.Fatal( err ) } fmt.Print( "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.Print( "Getting auth.db..." ) host := flag.Args()[0] if _, err := get_file( host, "/db/auth.db", "auth.db" ); err != nil { log.Fatal( err ) } fmt.Print( "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.Print( "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 } fmt.Println( "\t[" + res.Status + "]" ) if res.StatusCode == http.StatusNotFound { return nil, nil } 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", d, i ) // 1.0a //fn = fmt.Sprintf( "00000000_%d", 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 }