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
+}
+