shf_branch
commit
52e08b5a5c
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 45 KiB |
@ -0,0 +1,29 @@
|
||||
module webserver
|
||||
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/gin-gonic/gin v1.8.1
|
||||
github.com/mattn/go-sqlite3 v1.14.16
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||
github.com/go-playground/locales v0.14.0 // indirect
|
||||
github.com/go-playground/universal-translator v0.18.0 // indirect
|
||||
github.com/go-playground/validator/v10 v10.10.0 // indirect
|
||||
github.com/goccy/go-json v0.9.7 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/leodido/go-urn v1.2.1 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
|
||||
github.com/ugorji/go/codec v1.2.7 // indirect
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect
|
||||
golang.org/x/text v0.3.6 // indirect
|
||||
google.golang.org/protobuf v1.28.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
@ -0,0 +1,88 @@
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=
|
||||
github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
|
||||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
|
||||
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
|
||||
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
|
||||
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
||||
github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
|
||||
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
|
||||
github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM=
|
||||
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
|
||||
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
|
||||
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
|
||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
|
||||
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
|
||||
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
|
||||
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 h1:siQdpVirKtzPhKl3lZWozZraCFObP8S1v6PRp0bLrtU=
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"webserver/routers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
endPoint := fmt.Sprintf("0.0.0.0:%d", 8000)
|
||||
server := &http.Server{
|
||||
Addr: endPoint,
|
||||
Handler: routers.InitRouter(),
|
||||
}
|
||||
log.Printf("[info] start http server listening %s", endPoint)
|
||||
if err := server.ListenAndServe(); err != nil {
|
||||
log.Printf("start http server failed %s", err)
|
||||
}
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
app "webserver/pkg/app"
|
||||
)
|
||||
|
||||
// 获取本设备的mac地址
|
||||
func getMacAddress() (macAddress string) {
|
||||
netInterfaces, err := net.Interfaces()
|
||||
if err != nil {
|
||||
fmt.Printf("fail to get net interfaces: %v", err)
|
||||
return macAddress
|
||||
}
|
||||
|
||||
for _, netInterface := range netInterfaces {
|
||||
if netInterface.Name == "WLAN" {
|
||||
macAddress := netInterface.HardwareAddr
|
||||
return macAddress.String()
|
||||
}
|
||||
}
|
||||
return macAddress
|
||||
}
|
||||
|
||||
// 获取本设备的IP地址
|
||||
func getIpAddress() (addr string, err error) {
|
||||
var (
|
||||
ief *net.Interface
|
||||
addrs []net.Addr
|
||||
ipv4Addr net.IP
|
||||
)
|
||||
if ief, err = net.InterfaceByName("WLAN"); err != nil {
|
||||
return
|
||||
}
|
||||
if addrs, err = ief.Addrs(); err != nil {
|
||||
return
|
||||
}
|
||||
for _, addr := range addrs {
|
||||
if ipv4Addr = addr.(*net.IPNet).IP.To4(); ipv4Addr != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
if ipv4Addr == nil {
|
||||
return "", errors.New(fmt.Sprintf("interface WLAN don't have an ipv4 address\n"))
|
||||
}
|
||||
return ipv4Addr.String(), nil
|
||||
}
|
||||
|
||||
// 向服务器发送本设备的mac地址和IP地址
|
||||
func SendAddress(c *gin.Context) {
|
||||
appG := app.Gin{C: c}
|
||||
now := time.Now()
|
||||
hour := now.Hour()
|
||||
minute := now.Minute()
|
||||
t := hour*100 + minute
|
||||
macAddress := getMacAddress()
|
||||
ipAddress, err := getIpAddress()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
db, err := sql.Open("sqlite3", "info2.db")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer db.Close()
|
||||
rows, err := db.Query(`select macAddress from Endpoint where macAddress = ?;`, macAddress)
|
||||
defer rows.Close()
|
||||
var endpoint Endpoint
|
||||
rows.Next()
|
||||
rows.Scan(&endpoint.macAddress)
|
||||
if endpoint.macAddress == "" {
|
||||
db.Exec(`insert into Endpoint values (?,?,?,?);`, macAddress, ipAddress, 0, t)
|
||||
} else {
|
||||
db.Exec(`update Endpoint set ipAddress = ? where macAddress = ?;`, ipAddress, macAddress)
|
||||
db.Exec(`update Endpoint set isOnLine = ? where macAddress = ?;`, t, macAddress)
|
||||
}
|
||||
str := "time:" + strconv.Itoa(t) + " mac:" + macAddress + " ip:" + ipAddress
|
||||
appG.Response(http.StatusOK, "true", str)
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
app "webserver/pkg/app"
|
||||
)
|
||||
|
||||
type Endpoint struct {
|
||||
ipAddress string
|
||||
macAddress string
|
||||
}
|
||||
|
||||
// 拉取在线的算力设备
|
||||
func ipAddress() []string {
|
||||
now := time.Now()
|
||||
hour := now.Hour()
|
||||
minute := now.Minute()
|
||||
t := hour*100 + minute - 100
|
||||
db, err := sql.Open("sqlite3", "info2.db")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer db.Close()
|
||||
rows, _ := db.Query(`select average from Average;`)
|
||||
defer rows.Close()
|
||||
var average int
|
||||
rows.Next()
|
||||
rows.Scan(&average)
|
||||
rows, _ = db.Query(`select ipAddress from Endpoint where times <= ? and isOnLine >= ?;`, average, t)
|
||||
defer rows.Close()
|
||||
var endpoint Endpoint
|
||||
ipAddress := ""
|
||||
for rows.Next() {
|
||||
rows.Scan(&endpoint.ipAddress)
|
||||
ipAddress += endpoint.ipAddress + ","
|
||||
}
|
||||
rows.Close()
|
||||
sep := ","
|
||||
IpAddress := strings.Split(ipAddress, sep)
|
||||
return IpAddress
|
||||
}
|
||||
|
||||
func init() {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
}
|
||||
|
||||
// 洗牌算法
|
||||
func shuffle(n []string) {
|
||||
for i := 0; i < len(n); i++ {
|
||||
a := rand.Intn(len(n))
|
||||
b := rand.Intn(len(n))
|
||||
n[a], n[b] = n[b], n[a]
|
||||
}
|
||||
}
|
||||
|
||||
// 返回可进行运算的设备地址
|
||||
func Request(c *gin.Context) {
|
||||
appG := app.Gin{C: c}
|
||||
var ipAddress = ipAddress()
|
||||
for i := 0; i < 3; i++ {
|
||||
shuffle(ipAddress)
|
||||
}
|
||||
appG.Response(http.StatusOK, "成功", ipAddress)
|
||||
}
|
@ -0,0 +1,196 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"net/http"
|
||||
app "webserver/pkg/app"
|
||||
)
|
||||
|
||||
type XYZ struct {
|
||||
Word string `json:"word"`
|
||||
}
|
||||
|
||||
type TRANSLATION struct {
|
||||
Word string `json:"word"`
|
||||
}
|
||||
|
||||
type XYZBody struct {
|
||||
fig00 string
|
||||
fig01 string
|
||||
fig02 string
|
||||
fig03 string
|
||||
fig04 string
|
||||
fig05 string
|
||||
fig06 string
|
||||
fig07 string
|
||||
fig08 string
|
||||
fig09 string
|
||||
fig10 string
|
||||
fig11 string
|
||||
fig12 string
|
||||
fig13 string
|
||||
fig14 string
|
||||
fig15 string
|
||||
fig16 string
|
||||
fig17 string
|
||||
fig18 string
|
||||
fig19 string
|
||||
fig20 string
|
||||
fig21 string
|
||||
fig22 string
|
||||
fig23 string
|
||||
fig24 string
|
||||
fig25 string
|
||||
fig26 string
|
||||
fig27 string
|
||||
fig28 string
|
||||
fig29 string
|
||||
fig30 string
|
||||
fig31 string
|
||||
fig32 string
|
||||
fig33 string
|
||||
fig34 string
|
||||
fig35 string
|
||||
fig36 string
|
||||
fig37 string
|
||||
fig38 string
|
||||
fig39 string
|
||||
fig40 string
|
||||
fig41 string
|
||||
fig42 string
|
||||
fig43 string
|
||||
fig44 string
|
||||
fig45 string
|
||||
fig46 string
|
||||
fig47 string
|
||||
fig48 string
|
||||
fig49 string
|
||||
fig50 string
|
||||
fig51 string
|
||||
fig52 string
|
||||
fig53 string
|
||||
fig54 string
|
||||
fig55 string
|
||||
fig56 string
|
||||
fig57 string
|
||||
fig58 string
|
||||
fig59 string
|
||||
fig60 string
|
||||
fig61 string
|
||||
fig62 string
|
||||
fig63 string
|
||||
fig64 string
|
||||
fig65 string
|
||||
fig66 string
|
||||
fig67 string
|
||||
fig68 string
|
||||
fig69 string
|
||||
fig70 string
|
||||
fig71 string
|
||||
fig72 string
|
||||
fig73 string
|
||||
fig74 string
|
||||
fig75 string
|
||||
fig76 string
|
||||
fig77 string
|
||||
fig78 string
|
||||
fig79 string
|
||||
fig80 string
|
||||
fig81 string
|
||||
fig82 string
|
||||
fig83 string
|
||||
fig84 string
|
||||
fig85 string
|
||||
fig86 string
|
||||
fig87 string
|
||||
fig88 string
|
||||
fig89 string
|
||||
fig90 string
|
||||
fig91 string
|
||||
fig92 string
|
||||
fig93 string
|
||||
fig94 string
|
||||
fig95 string
|
||||
fig96 string
|
||||
fig97 string
|
||||
fig98 string
|
||||
fig99 string
|
||||
fig100 string
|
||||
fig101 string
|
||||
fig102 string
|
||||
fig103 string
|
||||
fig104 string
|
||||
fig105 string
|
||||
fig106 string
|
||||
fig107 string
|
||||
fig108 string
|
||||
fig109 string
|
||||
fig110 string
|
||||
fig111 string
|
||||
fig112 string
|
||||
fig113 string
|
||||
fig114 string
|
||||
fig115 string
|
||||
fig116 string
|
||||
fig117 string
|
||||
fig118 string
|
||||
fig119 string
|
||||
fig120 string
|
||||
fig121 string
|
||||
fig122 string
|
||||
fig123 string
|
||||
fig124 string
|
||||
fig125 string
|
||||
}
|
||||
|
||||
func SqliteQueryXYZ(c *gin.Context) {
|
||||
appG := app.Gin{C: c}
|
||||
s := c.Query("str")
|
||||
var str []string
|
||||
runes := []rune(s)
|
||||
for i := 0; i < len(runes); i++ {
|
||||
str = append(str, string(runes[i]))
|
||||
}
|
||||
db, err := sql.Open("sqlite3", "info.db")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer db.Close()
|
||||
strs := ""
|
||||
for i := 0; i < len(str); i++ {
|
||||
var rows, _ = db.Query(`select fig00, fig01, fig02, fig03, fig04, fig05, fig06, fig07, fig08, fig09, fig10, fig11, fig12, fig13, fig14, fig15, fig16, fig17, fig18, fig19, fig20, fig21, fig22, fig23, fig24, fig25, fig26, fig27, fig28, fig29, fig30, fig31, fig32, fig33, fig34, fig35, fig36, fig37, fig38, fig39, fig40, fig41, fig42, fig43, fig44, fig45, fig46, fig47, fig48, fig49, fig50, fig51, fig52, fig53, fig54, fig55, fig56, fig57, fig58, fig59, fig60, fig61, fig62, fig63, fig64, fig65, fig66, fig67, fig68, fig69,fig70, fig71, fig72, fig73, fig74, fig75, fig76, fig77, fig78, fig79, fig80, fig81, fig82, fig83, fig84, fig85, fig86, fig87, fig88, fig89, fig90, fig91, fig92, fig93, fig94, fig95, fig96, fig97, fig98, fig99, fig100, fig101, fig102, fig103, fig104, fig105, fig106, fig107, fig108, fig109, fig110, fig111, fig112, fig113, fig114, fig115, fig116, fig117, fig118, fig119, fig120, fig121, fig122, fig123, fig124, fig125 from XYZ where word = ?`, str[i])
|
||||
var body XYZBody
|
||||
rows.Next()
|
||||
rows.Scan(&body.fig00, &body.fig01, &body.fig02, &body.fig03, &body.fig04, &body.fig05, &body.fig06, &body.fig07, &body.fig08, &body.fig09, &body.fig10, &body.fig11, &body.fig12, &body.fig13, &body.fig14, &body.fig15, &body.fig16, &body.fig17, &body.fig18, &body.fig19, &body.fig20, &body.fig21, &body.fig22, &body.fig23, &body.fig24, &body.fig25, &body.fig26, &body.fig27, &body.fig28, &body.fig29, &body.fig30, &body.fig31, &body.fig32, &body.fig33, &body.fig34, &body.fig35, &body.fig36, &body.fig37, &body.fig38, &body.fig39, &body.fig40, &body.fig41, &body.fig42, &body.fig43, &body.fig44, &body.fig45, &body.fig46, &body.fig47, &body.fig48, &body.fig49, &body.fig50, &body.fig51, &body.fig52, &body.fig53, &body.fig54, &body.fig55, &body.fig56, &body.fig57, &body.fig58, &body.fig59, &body.fig60, &body.fig61, &body.fig62, &body.fig63, &body.fig64, &body.fig65, &body.fig66, &body.fig67, &body.fig68, &body.fig69, &body.fig70, &body.fig71, &body.fig72, &body.fig73, &body.fig74, &body.fig75, &body.fig76, &body.fig77, &body.fig78, &body.fig79, &body.fig80, &body.fig81, &body.fig82, &body.fig83, &body.fig84, &body.fig85, &body.fig86, &body.fig87, &body.fig88, &body.fig89, &body.fig90, &body.fig91, &body.fig92, &body.fig93, &body.fig94, &body.fig95, &body.fig96, &body.fig97, &body.fig98, &body.fig99, &body.fig100, &body.fig101, &body.fig102, &body.fig103, &body.fig104, &body.fig105, &body.fig106, &body.fig107, &body.fig108, &body.fig109, &body.fig110, &body.fig111, &body.fig112, &body.fig113, &body.fig114, &body.fig115, &body.fig116, &body.fig117, &body.fig118, &body.fig119, &body.fig120, &body.fig121, &body.fig122, &body.fig123, &body.fig124, &body.fig125)
|
||||
if body.fig00 == "" {
|
||||
strs += "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
|
||||
} else {
|
||||
strs += body.fig00 + "," + body.fig01 + "," + body.fig02 + "," + body.fig03 + "," + body.fig04 + "," + body.fig05 + "," + body.fig06 + "," + body.fig07 + "," + body.fig08 + "," + body.fig09 + "," + body.fig10 + "," + body.fig11 + "," + body.fig12 + "," + body.fig13 + "," + body.fig14 + "," + body.fig15 + "," + body.fig16 + "," + body.fig17 + "," + body.fig18 + "," + body.fig19 + "," + body.fig20 + "," + body.fig21 + "," + body.fig22 + "," + body.fig23 + "," + body.fig24 + "," + body.fig25 + "," + body.fig26 + "," + body.fig27 + "," + body.fig28 + "," + body.fig29 + "," + body.fig30 + "," + body.fig31 + "," + body.fig32 + "," + body.fig33 + "," + body.fig34 + "," + body.fig35 + "," + body.fig36 + "," + body.fig37 + "," + body.fig38 + "," + body.fig39 + "," + body.fig40 + "," + body.fig41 + "," + body.fig42 + "," + body.fig43 + "," + body.fig44 + "," + body.fig45 + "," + body.fig46 + "," + body.fig47 + "," + body.fig48 + "," + body.fig49 + "," + body.fig50 + "," + body.fig51 + "," + body.fig52 + "," + body.fig53 + "," + body.fig54 + "," + body.fig55 + "," + body.fig56 + "," + body.fig57 + "," + body.fig58 + "," + body.fig59 + "," + body.fig60 + "," + body.fig61 + "," + body.fig62 + "," + body.fig63 + "," + body.fig64 + "," + body.fig65 + "," + body.fig66 + "," + body.fig67 + "," + body.fig68 + "," + body.fig69 + "," + body.fig70 + "," + body.fig71 + "," + body.fig72 + "," + body.fig73 + "," + body.fig74 + "," + body.fig75 + "," + body.fig76 + "," + body.fig77 + "," + body.fig78 + "," + body.fig79 + "," + body.fig80 + "," + body.fig81 + "," + body.fig82 + "," + body.fig83 + "," + body.fig84 + "," + body.fig85 + "," + body.fig86 + "," + body.fig87 + "," + body.fig88 + "," + body.fig89 + "," + body.fig90 + "," + body.fig91 + "," + body.fig92 + "," + body.fig93 + "," + body.fig94 + "," + body.fig95 + "," + body.fig96 + "," + body.fig97 + "," + body.fig98 + "," + body.fig99 + "," + body.fig100 + "," + body.fig101 + "," + body.fig102 + "," + body.fig103 + "," + body.fig104 + "," + body.fig105 + "," + body.fig106 + "," + body.fig107 + "," + body.fig108 + "," + body.fig109 + "," + body.fig110 + "," + body.fig111 + "," + body.fig112 + "," + body.fig113 + "," + body.fig114 + "," + body.fig115 + "," + body.fig116 + "," + body.fig117 + "," + body.fig118 + "," + body.fig119 + "," + body.fig120 + "," + body.fig121 + "," + body.fig122 + "," + body.fig123 + "," + body.fig124 + "," + body.fig125
|
||||
}
|
||||
strs += "|"
|
||||
rows.Close()
|
||||
}
|
||||
appG.Response(http.StatusOK, "true", strs)
|
||||
}
|
||||
|
||||
func SqliteQueryTRANSLATION(c *gin.Context) {
|
||||
appG := app.Gin{C: c}
|
||||
s := c.Query("str")
|
||||
db, err := sql.Open("sqlite3", "info1.db")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer db.Close()
|
||||
rows, _ := db.Query(`select word from TRANSLATION where num = ?;`, s)
|
||||
var str string
|
||||
rows.Next()
|
||||
rows.Scan(&str)
|
||||
rows.Close()
|
||||
if str == "" {
|
||||
str = "0"
|
||||
}
|
||||
appG.Response(http.StatusOK, "true", str)
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package pkg
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type Gin struct {
|
||||
C *gin.Context
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
func (g *Gin) Response(httpCode int, errMsg string, data interface{}) {
|
||||
g.C.JSON(httpCode, Response{
|
||||
Code: httpCode,
|
||||
Msg: errMsg,
|
||||
Data: data,
|
||||
})
|
||||
return
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package routers
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
api "webserver/pkg/api"
|
||||
)
|
||||
|
||||
// InitRouter 初始化路由信息
|
||||
func InitRouter() *gin.Engine {
|
||||
r := gin.Default()
|
||||
// 静态文件路由
|
||||
r.LoadHTMLGlob("./template/*")
|
||||
r.StaticFS("/template", http.Dir("template"))
|
||||
r.StaticFS("/static", http.Dir("static"))
|
||||
r.GET("/trans", api.SqliteQueryTRANSLATION)
|
||||
r.GET("/xyz", api.SqliteQueryXYZ)
|
||||
r.GET("/address", api.SendAddress)
|
||||
r.GET("/request", api.Request)
|
||||
return r
|
||||
}
|
@ -0,0 +1,539 @@
|
||||
(function() {
|
||||
/*
|
||||
|
||||
Copyright The Closure Library Authors.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
function n(a) {
|
||||
var b = 0;
|
||||
return function() {
|
||||
return b < a.length ? {
|
||||
done: !1,
|
||||
value: a[b++]
|
||||
} : {
|
||||
done: !0
|
||||
}
|
||||
}
|
||||
}
|
||||
var q = "function" == typeof Object.defineProperties ? Object.defineProperty : function(a, b, e) {
|
||||
if (a == Array.prototype || a == Object.prototype) return a;
|
||||
a[b] = e.value;
|
||||
return a
|
||||
};
|
||||
|
||||
function t(a) {
|
||||
a = ["object" == typeof globalThis && globalThis, a, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global];
|
||||
for (var b = 0; b < a.length; ++b) {
|
||||
var e = a[b];
|
||||
if (e && e.Math == Math) return e
|
||||
}
|
||||
throw Error("Cannot find global object");
|
||||
}
|
||||
var u = t(this);
|
||||
|
||||
function v(a, b) {
|
||||
if (b) a: {
|
||||
var e = u;a = a.split(".");
|
||||
for (var f = 0; f < a.length - 1; f++) {
|
||||
var h = a[f];
|
||||
if (!(h in e)) break a;
|
||||
e = e[h]
|
||||
}
|
||||
a = a[a.length - 1];f = e[a];b = b(f);b != f && null != b && q(e, a, {
|
||||
configurable: !0,
|
||||
writable: !0,
|
||||
value: b
|
||||
})
|
||||
}
|
||||
}
|
||||
v("Symbol", function(a) {
|
||||
function b(l) {
|
||||
if (this instanceof b) throw new TypeError("Symbol is not a constructor");
|
||||
return new e(f + (l || "") + "_" + h++, l)
|
||||
}
|
||||
|
||||
function e(l, c) {
|
||||
this.g = l;
|
||||
q(this, "description", {
|
||||
configurable: !0,
|
||||
writable: !0,
|
||||
value: c
|
||||
})
|
||||
}
|
||||
if (a) return a;
|
||||
e.prototype.toString = function() {
|
||||
return this.g
|
||||
};
|
||||
var f = "jscomp_symbol_" + (1E9 * Math.random() >>> 0) + "_",
|
||||
h = 0;
|
||||
return b
|
||||
});
|
||||
v("Symbol.iterator", function(a) {
|
||||
if (a) return a;
|
||||
a = Symbol("Symbol.iterator");
|
||||
for (var b = "Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "), e = 0; e < b.length; e++) {
|
||||
var f = u[b[e]];
|
||||
"function" === typeof f && "function" != typeof f.prototype[a] && q(f.prototype, a, {
|
||||
configurable: !0,
|
||||
writable: !0,
|
||||
value: function() {
|
||||
return w(n(this))
|
||||
}
|
||||
})
|
||||
}
|
||||
return a
|
||||
});
|
||||
|
||||
function w(a) {
|
||||
a = {
|
||||
next: a
|
||||
};
|
||||
a[Symbol.iterator] = function() {
|
||||
return this
|
||||
};
|
||||
return a
|
||||
}
|
||||
|
||||
function x(a) {
|
||||
var b = "undefined" != typeof Symbol && Symbol.iterator && a[Symbol.iterator];
|
||||
return b ? b.call(a) : {
|
||||
next: n(a)
|
||||
}
|
||||
}
|
||||
|
||||
function y() {
|
||||
this.i = !1;
|
||||
this.g = null;
|
||||
this.o = void 0;
|
||||
this.j = 1;
|
||||
this.m = 0;
|
||||
this.h = null
|
||||
}
|
||||
|
||||
function z(a) {
|
||||
if (a.i) throw new TypeError("Generator is already running");
|
||||
a.i = !0
|
||||
}
|
||||
y.prototype.l = function(a) {
|
||||
this.o = a
|
||||
};
|
||||
|
||||
function A(a, b) {
|
||||
a.h = {
|
||||
F: b,
|
||||
G: !0
|
||||
};
|
||||
a.j = a.m
|
||||
}
|
||||
y.prototype.return = function(a) {
|
||||
this.h = {
|
||||
return: a
|
||||
};
|
||||
this.j = this.m
|
||||
};
|
||||
|
||||
function B(a) {
|
||||
this.g = new y;
|
||||
this.h = a
|
||||
}
|
||||
|
||||
function C(a, b) {
|
||||
z(a.g);
|
||||
var e = a.g.g;
|
||||
if (e) return D(a, "return" in e ? e["return"] : function(f) {
|
||||
return {
|
||||
value: f,
|
||||
done: !0
|
||||
}
|
||||
}, b, a.g.return);
|
||||
a.g.return(b);
|
||||
return H(a)
|
||||
}
|
||||
|
||||
function D(a, b, e, f) {
|
||||
try {
|
||||
var h = b.call(a.g.g, e);
|
||||
if (!(h instanceof Object)) throw new TypeError("Iterator result " + h + " is not an object");
|
||||
if (!h.done) return a.g.i = !1, h;
|
||||
var l = h.value
|
||||
} catch (c) {
|
||||
return a.g.g = null, A(a.g, c), H(a)
|
||||
}
|
||||
a.g.g = null;
|
||||
f.call(a.g, l);
|
||||
return H(a)
|
||||
}
|
||||
|
||||
function H(a) {
|
||||
for (; a.g.j;) try {
|
||||
var b = a.h(a.g);
|
||||
if (b) return a.g.i = !1, {
|
||||
value: b.value,
|
||||
done: !1
|
||||
}
|
||||
} catch (e) {
|
||||
a.g.o = void 0, A(a.g, e)
|
||||
}
|
||||
a.g.i = !1;
|
||||
if (a.g.h) {
|
||||
b = a.g.h;
|
||||
a.g.h = null;
|
||||
if (b.G) throw b.F;
|
||||
return {
|
||||
value: b.return,
|
||||
done: !0
|
||||
}
|
||||
}
|
||||
return {
|
||||
value: void 0,
|
||||
done: !0
|
||||
}
|
||||
}
|
||||
|
||||
function I(a) {
|
||||
this.next = function(b) {
|
||||
z(a.g);
|
||||
a.g.g ? b = D(a, a.g.g.next, b, a.g.l) : (a.g.l(b), b = H(a));
|
||||
return b
|
||||
};
|
||||
this.throw = function(b) {
|
||||
z(a.g);
|
||||
a.g.g ? b = D(a, a.g.g["throw"], b, a.g.l) : (A(a.g, b), b = H(a));
|
||||
return b
|
||||
};
|
||||
this.return = function(b) {
|
||||
return C(a, b)
|
||||
};
|
||||
this[Symbol.iterator] = function() {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
function J(a) {
|
||||
function b(f) {
|
||||
return a.next(f)
|
||||
}
|
||||
|
||||
function e(f) {
|
||||
return a.throw(f)
|
||||
}
|
||||
return new Promise(function(f, h) {
|
||||
function l(c) {
|
||||
c.done ? f(c.value) : Promise.resolve(c.value).then(b, e).then(l, h)
|
||||
}
|
||||
l(a.next())
|
||||
})
|
||||
}
|
||||
v("Promise", function(a) {
|
||||
function b(c) {
|
||||
this.h = 0;
|
||||
this.i = void 0;
|
||||
this.g = [];
|
||||
this.o = !1;
|
||||
var d = this.j();
|
||||
try {
|
||||
c(d.resolve, d.reject)
|
||||
} catch (g) {
|
||||
d.reject(g)
|
||||
}
|
||||
}
|
||||
|
||||
function e() {
|
||||
this.g = null
|
||||
}
|
||||
|
||||
function f(c) {
|
||||
return c instanceof b ? c : new b(function(d) {
|
||||
d(c)
|
||||
})
|
||||
}
|
||||
if (a) return a;
|
||||
e.prototype.h = function(c) {
|
||||
if (null == this.g) {
|
||||
this.g = [];
|
||||
var d = this;
|
||||
this.i(function() {
|
||||
d.l()
|
||||
})
|
||||
}
|
||||
this.g.push(c)
|
||||
};
|
||||
var h = u.setTimeout;
|
||||
e.prototype.i = function(c) {
|
||||
h(c, 0)
|
||||
};
|
||||
e.prototype.l = function() {
|
||||
for (; this.g && this.g.length;) {
|
||||
var c = this.g;
|
||||
this.g = [];
|
||||
for (var d = 0; d < c.length; ++d) {
|
||||
var g =
|
||||
c[d];
|
||||
c[d] = null;
|
||||
try {
|
||||
g()
|
||||
} catch (k) {
|
||||
this.j(k)
|
||||
}
|
||||
}
|
||||
}
|
||||
this.g = null
|
||||
};
|
||||
e.prototype.j = function(c) {
|
||||
this.i(function() {
|
||||
throw c;
|
||||
})
|
||||
};
|
||||
b.prototype.j = function() {
|
||||
function c(k) {
|
||||
return function(m) {
|
||||
g || (g = !0, k.call(d, m))
|
||||
}
|
||||
}
|
||||
var d = this,
|
||||
g = !1;
|
||||
return {
|
||||
resolve: c(this.A),
|
||||
reject: c(this.l)
|
||||
}
|
||||
};
|
||||
b.prototype.A = function(c) {
|
||||
if (c === this) this.l(new TypeError("A Promise cannot resolve to itself"));
|
||||
else if (c instanceof b) this.C(c);
|
||||
else {
|
||||
a: switch (typeof c) {
|
||||
case "object":
|
||||
var d = null != c;
|
||||
break a;
|
||||
case "function":
|
||||
d = !0;
|
||||
break a;
|
||||
default:
|
||||
d = !1
|
||||
}
|
||||
d ? this.v(c) : this.m(c)
|
||||
}
|
||||
};
|
||||
b.prototype.v = function(c) {
|
||||
var d = void 0;
|
||||
try {
|
||||
d = c.then
|
||||
} catch (g) {
|
||||
this.l(g);
|
||||
return
|
||||
}
|
||||
"function" == typeof d ? this.D(d, c) : this.m(c)
|
||||
};
|
||||
b.prototype.l = function(c) {
|
||||
this.u(2, c)
|
||||
};
|
||||
b.prototype.m = function(c) {
|
||||
this.u(1, c)
|
||||
};
|
||||
b.prototype.u = function(c, d) {
|
||||
if (0 != this.h) throw Error("Cannot settle(" + c + ", " + d + "): Promise already settled in state" + this.h);
|
||||
this.h = c;
|
||||
this.i = d;
|
||||
2 === this.h && this.B();
|
||||
this.H()
|
||||
};
|
||||
b.prototype.B = function() {
|
||||
var c = this;
|
||||
h(function() {
|
||||
if (c.I()) {
|
||||
var d = u.console;
|
||||
"undefined" !== typeof d && d.error(c.i)
|
||||
}
|
||||
}, 1)
|
||||
};
|
||||
b.prototype.I =
|
||||
function() {
|
||||
if (this.o) return !1;
|
||||
var c = u.CustomEvent,
|
||||
d = u.Event,
|
||||
g = u.dispatchEvent;
|
||||
if ("undefined" === typeof g) return !0;
|
||||
"function" === typeof c ? c = new c("unhandledrejection", {
|
||||
cancelable: !0
|
||||
}) : "function" === typeof d ? c = new d("unhandledrejection", {
|
||||
cancelable: !0
|
||||
}) : (c = u.document.createEvent("CustomEvent"), c.initCustomEvent("unhandledrejection", !1, !0, c));
|
||||
c.promise = this;
|
||||
c.reason = this.i;
|
||||
return g(c)
|
||||
};
|
||||
b.prototype.H = function() {
|
||||
if (null != this.g) {
|
||||
for (var c = 0; c < this.g.length; ++c) l.h(this.g[c]);
|
||||
this.g = null
|
||||
}
|
||||
};
|
||||
var l = new e;
|
||||
b.prototype.C =
|
||||
function(c) {
|
||||
var d = this.j();
|
||||
c.s(d.resolve, d.reject)
|
||||
};
|
||||
b.prototype.D = function(c, d) {
|
||||
var g = this.j();
|
||||
try {
|
||||
c.call(d, g.resolve, g.reject)
|
||||
} catch (k) {
|
||||
g.reject(k)
|
||||
}
|
||||
};
|
||||
b.prototype.then = function(c, d) {
|
||||
function g(p, r) {
|
||||
return "function" == typeof p ? function(E) {
|
||||
try {
|
||||
k(p(E))
|
||||
} catch (F) {
|
||||
m(F)
|
||||
}
|
||||
} : r
|
||||
}
|
||||
var k, m, G = new b(function(p, r) {
|
||||
k = p;
|
||||
m = r
|
||||
});
|
||||
this.s(g(c, k), g(d, m));
|
||||
return G
|
||||
};
|
||||
b.prototype.catch = function(c) {
|
||||
return this.then(void 0, c)
|
||||
};
|
||||
b.prototype.s = function(c, d) {
|
||||
function g() {
|
||||
switch (k.h) {
|
||||
case 1:
|
||||
c(k.i);
|
||||
break;
|
||||
case 2:
|
||||
d(k.i);
|
||||
break;
|
||||
default:
|
||||
throw Error("Unexpected state: " +
|
||||
k.h);
|
||||
}
|
||||
}
|
||||
var k = this;
|
||||
null == this.g ? l.h(g) : this.g.push(g);
|
||||
this.o = !0
|
||||
};
|
||||
b.resolve = f;
|
||||
b.reject = function(c) {
|
||||
return new b(function(d, g) {
|
||||
g(c)
|
||||
})
|
||||
};
|
||||
b.race = function(c) {
|
||||
return new b(function(d, g) {
|
||||
for (var k = x(c), m = k.next(); !m.done; m = k.next()) f(m.value).s(d, g)
|
||||
})
|
||||
};
|
||||
b.all = function(c) {
|
||||
var d = x(c),
|
||||
g = d.next();
|
||||
return g.done ? f([]) : new b(function(k, m) {
|
||||
function G(E) {
|
||||
return function(F) {
|
||||
p[E] = F;
|
||||
r--;
|
||||
0 == r && k(p)
|
||||
}
|
||||
}
|
||||
var p = [],
|
||||
r = 0;
|
||||
do p.push(void 0), r++, f(g.value).s(G(p.length - 1), m), g = d.next(); while (!g.done)
|
||||
})
|
||||
};
|
||||
return b
|
||||
});
|
||||
var K = "function" == typeof Object.assign ? Object.assign : function(a, b) {
|
||||
for (var e = 1; e < arguments.length; e++) {
|
||||
var f = arguments[e];
|
||||
if (f)
|
||||
for (var h in f) Object.prototype.hasOwnProperty.call(f, h) && (a[h] = f[h])
|
||||
}
|
||||
return a
|
||||
};
|
||||
v("Object.assign", function(a) {
|
||||
return a || K
|
||||
});
|
||||
var L = this || self;
|
||||
var M = {
|
||||
facingMode: "user",
|
||||
width: 640,
|
||||
height: 480
|
||||
};
|
||||
|
||||
function N(a, b) {
|
||||
this.video = a;
|
||||
this.i = 0;
|
||||
this.h = Object.assign(Object.assign({}, M), b)
|
||||
}
|
||||
N.prototype.stop = function() {
|
||||
var a = this,
|
||||
b, e, f, h;
|
||||
return J(new I(new B(function(l) {
|
||||
if (a.g) {
|
||||
b = a.g.getTracks();
|
||||
e = x(b);
|
||||
for (f = e.next(); !f.done; f = e.next()) h = f.value, h.stop();
|
||||
a.g = void 0
|
||||
}
|
||||
l.j = 0
|
||||
})))
|
||||
};
|
||||
N.prototype.start = function() {
|
||||
var a = this,
|
||||
b;
|
||||
return J(new I(new B(function(e) {
|
||||
navigator.mediaDevices && navigator.mediaDevices.getUserMedia || alert("No navigator.mediaDevices.getUserMedia exists.");
|
||||
b = a.h;
|
||||
return e.return(navigator.mediaDevices.getUserMedia({
|
||||
video: {
|
||||
facingMode: b.facingMode,
|
||||
width: b.width,
|
||||
height: b.height
|
||||
}
|
||||
}).then(function(f) {
|
||||
O(a, f)
|
||||
}).catch(function(f) {
|
||||
var h = "Failed to acquire camera feed: " + f;
|
||||
console.error(h);
|
||||
alert(h);
|
||||
throw f;
|
||||
}))
|
||||
})))
|
||||
};
|
||||
|
||||
function P(a) {
|
||||
window.requestAnimationFrame(function() {
|
||||
Q(a)
|
||||
})
|
||||
}
|
||||
|
||||
function O(a, b) {
|
||||
a.g = b;
|
||||
a.video.srcObject = b;
|
||||
a.video.onloadedmetadata = function() {
|
||||
a.video.play();
|
||||
P(a)
|
||||
}
|
||||
}
|
||||
|
||||
function Q(a) {
|
||||
var b = null;
|
||||
a.video.paused || a.video.currentTime === a.i || (a.i = a.video.currentTime, b = a.h.onFrame());
|
||||
b ? b.then(function() {
|
||||
P(a)
|
||||
}) : P(a)
|
||||
}
|
||||
var R = ["Camera"],
|
||||
S = L;
|
||||
R[0] in S || "undefined" == typeof S.execScript || S.execScript("var " + R[0]);
|
||||
for (var T; R.length && (T = R.shift());) R.length || void 0 === N ? S[T] && S[T] !== Object.prototype[T] ? S = S[T] : S = S[T] = {} : S[T] = N;
|
||||
}).call(this);
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue