mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-29 06:35:07 +03:00
load index.html from file resource
This commit is contained in:
parent
0d2bec087c
commit
0a2e54cd60
7 changed files with 175 additions and 161 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.history
|
4
contrib/ui/mesh-ui/assets/all.min.css
vendored
Normal file
4
contrib/ui/mesh-ui/assets/all.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
contrib/ui/mesh-ui/assets/bulmaswatch.min.css
vendored
Normal file
6
contrib/ui/mesh-ui/assets/bulmaswatch.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
contrib/ui/mesh-ui/assets/bulmaswatch.min.css.map
Normal file
1
contrib/ui/mesh-ui/assets/bulmaswatch.min.css.map
Normal file
File diff suppressed because one or more lines are too long
|
@ -6,8 +6,8 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>RiV-mesh</title>
|
||||
<link rel="stylesheet" href="https://maxst.icons8.com/vue-static/landings/line-awesome/font-awesome-line-awesome/css/all.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/bulmaswatch/slate/bulmaswatch.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="assets/all.min.css" type="text/css">
|
||||
<link rel="stylesheet" href="assets/bulmaswatch.min.css" type="text/css">
|
||||
<script>
|
||||
|
||||
function setFieldValue(id, value){
|
||||
|
|
BIN
contrib/ui/mesh-ui/webfonts/fa-solid-900.woff2
Normal file
BIN
contrib/ui/mesh-ui/webfonts/fa-solid-900.woff2
Normal file
Binary file not shown.
|
@ -1,162 +1,164 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/webview/webview"
|
||||
"github.com/hjson/hjson-go"
|
||||
"encoding/json"
|
||||
"path/filepath"
|
||||
"io/ioutil"
|
||||
"os/exec"
|
||||
"net/url"
|
||||
"runtime"
|
||||
"strings"
|
||||
"strconv"
|
||||
"time"
|
||||
"net"
|
||||
"log"
|
||||
"fmt"
|
||||
"os"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/RiV-chain/RiV-mesh/src/admin"
|
||||
"github.com/hjson/hjson-go"
|
||||
"github.com/webview/webview"
|
||||
|
||||
"github.com/RiV-chain/RiV-mesh/src/admin"
|
||||
)
|
||||
|
||||
var riv_ctrl_path string
|
||||
|
||||
func main() {
|
||||
debug := true
|
||||
w := webview.New(debug)
|
||||
defer w.Destroy()
|
||||
w.SetTitle("RiV-mesh")
|
||||
w.SetSize(690, 920, webview.HintFixed)
|
||||
/*1. Create ~/.riv-mesh folder if not existing
|
||||
*2. Create ~/.riv-mesh/mesh.conf if not existing
|
||||
*3. If the file exists read Peers.
|
||||
*3.1 Invoke add peers for each record
|
||||
*/
|
||||
mesh_folder := ".riv-mesh"
|
||||
mesh_conf := "mesh.conf"
|
||||
user_home := get_user_home_path()
|
||||
mesh_settings_folder := filepath.Join(user_home, mesh_folder)
|
||||
err := os.MkdirAll(mesh_settings_folder, os.ModePerm)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to create folder: %v", err)
|
||||
}
|
||||
mesh_settings_path := filepath.Join(user_home, mesh_folder, mesh_conf)
|
||||
riv_ctrl_path = get_ctl_path()
|
||||
if _, err := os.Stat(mesh_settings_path); os.IsNotExist(err) {
|
||||
err := ioutil.WriteFile(mesh_settings_path, []byte(""), 0750)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to write file: %v", err)
|
||||
}
|
||||
} else {
|
||||
//read peers from mesh.conf
|
||||
conf, _ := ioutil.ReadFile(mesh_settings_path)
|
||||
var dat map[string]interface {}
|
||||
if err := hjson.Unmarshal(conf, &dat); err != nil {
|
||||
fmt.Printf("Unable to parse mesh.conf file: %v", err)
|
||||
} else {
|
||||
if dat["Peers"]!=nil {
|
||||
peers := dat["Peers"].([]interface{})
|
||||
remove_peers()
|
||||
for _, u := range peers {
|
||||
log.Printf("Unmarshaled: %v", u.(string))
|
||||
add_peers(u.(string))
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("Warning: Peers array not loaded from mesh.conf file")
|
||||
}
|
||||
}
|
||||
}
|
||||
var path string
|
||||
debug := true
|
||||
w := webview.New(debug)
|
||||
defer w.Destroy()
|
||||
w.SetTitle("RiV-mesh")
|
||||
w.SetSize(690, 920, webview.HintFixed)
|
||||
/*1. Create ~/.riv-mesh folder if not existing
|
||||
*2. Create ~/.riv-mesh/mesh.conf if not existing
|
||||
*3. If the file exists read Peers.
|
||||
*3.1 Invoke add peers for each record
|
||||
*/
|
||||
mesh_folder := ".riv-mesh"
|
||||
mesh_conf := "mesh.conf"
|
||||
user_home := get_user_home_path()
|
||||
mesh_settings_folder := filepath.Join(user_home, mesh_folder)
|
||||
err := os.MkdirAll(mesh_settings_folder, os.ModePerm)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to create folder: %v", err)
|
||||
}
|
||||
mesh_settings_path := filepath.Join(user_home, mesh_folder, mesh_conf)
|
||||
riv_ctrl_path = get_ctl_path()
|
||||
if _, err := os.Stat(mesh_settings_path); os.IsNotExist(err) {
|
||||
err := ioutil.WriteFile(mesh_settings_path, []byte(""), 0750)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to write file: %v", err)
|
||||
}
|
||||
} else {
|
||||
//read peers from mesh.conf
|
||||
conf, _ := ioutil.ReadFile(mesh_settings_path)
|
||||
var dat map[string]interface{}
|
||||
if err := hjson.Unmarshal(conf, &dat); err != nil {
|
||||
fmt.Printf("Unable to parse mesh.conf file: %v", err)
|
||||
} else {
|
||||
if dat["Peers"] != nil {
|
||||
peers := dat["Peers"].([]interface{})
|
||||
remove_peers()
|
||||
for _, u := range peers {
|
||||
log.Printf("Unmarshaled: %v", u.(string))
|
||||
add_peers(u.(string))
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("Warning: Peers array not loaded from mesh.conf file")
|
||||
}
|
||||
}
|
||||
}
|
||||
var path string
|
||||
|
||||
if len(os.Args)>1 {
|
||||
path, err = filepath.Abs(filepath.Dir(os.Args[1]))
|
||||
} else {
|
||||
path, err = filepath.Abs(filepath.Dir(os.Args[0]))
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if len(os.Args) > 1 {
|
||||
path, err = filepath.Abs(filepath.Dir(os.Args[1]))
|
||||
} else {
|
||||
path, err = filepath.Abs(filepath.Dir(os.Args[0]))
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Println(path)
|
||||
w.Bind("onLoad", func() {
|
||||
log.Println("page loaded")
|
||||
go run(w)
|
||||
})
|
||||
w.Bind("savePeers", func(peer_list string) {
|
||||
//log.Println("peers saved ", peer_list)
|
||||
var peers []string
|
||||
_ = json.Unmarshal([]byte(peer_list), &peers)
|
||||
log.Printf("Unmarshaled: %v", peers)
|
||||
remove_peers()
|
||||
for _, u := range peers {
|
||||
log.Printf("Unmarshaled: %v", u)
|
||||
add_peers(u)
|
||||
}
|
||||
//add peers to ~/mesh.conf
|
||||
dat := make(map[string]interface{})
|
||||
dat["Peers"] = peers
|
||||
bs, _ := hjson.Marshal(dat)
|
||||
e := ioutil.WriteFile(mesh_settings_path, bs, 0750)
|
||||
if e != nil {
|
||||
fmt.Printf("Unable to write file: %v", e)
|
||||
}
|
||||
})
|
||||
w.Bind("ping", func(peer_list string) {
|
||||
go ping(w, peer_list)
|
||||
})
|
||||
dat, err := ioutil.ReadFile(path+"/index.html")
|
||||
w.Navigate("data:text/html,"+url.QueryEscape(string(dat)))
|
||||
//w.Navigate("data:text/html,"+"<html>"+path+"</html>")
|
||||
w.Run()
|
||||
log.Println(path)
|
||||
w.Bind("onLoad", func() {
|
||||
log.Println("page loaded")
|
||||
go run(w)
|
||||
})
|
||||
w.Bind("savePeers", func(peer_list string) {
|
||||
//log.Println("peers saved ", peer_list)
|
||||
var peers []string
|
||||
_ = json.Unmarshal([]byte(peer_list), &peers)
|
||||
log.Printf("Unmarshaled: %v", peers)
|
||||
remove_peers()
|
||||
for _, u := range peers {
|
||||
log.Printf("Unmarshaled: %v", u)
|
||||
add_peers(u)
|
||||
}
|
||||
//add peers to ~/mesh.conf
|
||||
dat := make(map[string]interface{})
|
||||
dat["Peers"] = peers
|
||||
bs, _ := hjson.Marshal(dat)
|
||||
e := ioutil.WriteFile(mesh_settings_path, bs, 0750)
|
||||
if e != nil {
|
||||
fmt.Printf("Unable to write file: %v", e)
|
||||
}
|
||||
})
|
||||
w.Bind("ping", func(peer_list string) {
|
||||
go ping(w, peer_list)
|
||||
})
|
||||
//dat, err := ioutil.ReadFile(path+"/index.html")
|
||||
//w.Navigate("data:text/html,"+url.QueryEscape(string(dat)))
|
||||
//w.Navigate("data:text/html,"+"<html>"+path+"</html>")
|
||||
w.Navigate("file://" + path + "/index.html")
|
||||
w.Run()
|
||||
}
|
||||
|
||||
func ping(w webview.WebView, peer_list string){
|
||||
var peers []string
|
||||
_ = json.Unmarshal([]byte(peer_list), &peers)
|
||||
log.Printf("Unmarshaled: %v", peers)
|
||||
for _, u := range peers {
|
||||
log.Printf("Unmarshaled: %v", u)
|
||||
ping_time := check(u);
|
||||
log.Printf("ping: %d", ping_time)
|
||||
setPingValue(w, u, strconv.FormatInt(ping_time, 10));
|
||||
}
|
||||
func ping(w webview.WebView, peer_list string) {
|
||||
var peers []string
|
||||
_ = json.Unmarshal([]byte(peer_list), &peers)
|
||||
log.Printf("Unmarshaled: %v", peers)
|
||||
for _, u := range peers {
|
||||
log.Printf("Unmarshaled: %v", u)
|
||||
ping_time := check(u)
|
||||
log.Printf("ping: %d", ping_time)
|
||||
setPingValue(w, u, strconv.FormatInt(ping_time, 10))
|
||||
}
|
||||
}
|
||||
|
||||
func check(peer string) int64 {
|
||||
u, e := url.Parse(peer)
|
||||
if e!=nil {
|
||||
return -1
|
||||
}
|
||||
t := time.Now()
|
||||
_, err := net.DialTimeout("tcp", u.Host, 5*time.Second)
|
||||
if err!=nil {
|
||||
return -1
|
||||
}
|
||||
d := time.Since(t)
|
||||
return d.Milliseconds()
|
||||
u, e := url.Parse(peer)
|
||||
if e != nil {
|
||||
return -1
|
||||
}
|
||||
t := time.Now()
|
||||
_, err := net.DialTimeout("tcp", u.Host, 5*time.Second)
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
d := time.Since(t)
|
||||
return d.Milliseconds()
|
||||
}
|
||||
|
||||
func get_user_home_path() string {
|
||||
if runtime.GOOS == "windows" {
|
||||
path, exists := os.LookupEnv("USERPROFILE")
|
||||
if exists {
|
||||
return path
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
} else {
|
||||
path, exists := os.LookupEnv("HOME")
|
||||
if exists {
|
||||
return path
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
if runtime.GOOS == "windows" {
|
||||
path, exists := os.LookupEnv("USERPROFILE")
|
||||
if exists {
|
||||
return path
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
} else {
|
||||
path, exists := os.LookupEnv("HOME")
|
||||
if exists {
|
||||
return path
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func get_ctl_path() string{
|
||||
if runtime.GOOS == "windows" {
|
||||
func get_ctl_path() string {
|
||||
if runtime.GOOS == "windows" {
|
||||
program_path := "programfiles"
|
||||
path, exists := os.LookupEnv(program_path)
|
||||
if exists {
|
||||
|
@ -173,17 +175,17 @@ func get_ctl_path() string{
|
|||
}
|
||||
}
|
||||
|
||||
func run(w webview.WebView){
|
||||
if len(riv_ctrl_path) > 0 {
|
||||
get_self(w)
|
||||
get_peers(w)
|
||||
}
|
||||
_ = time.AfterFunc(10*time.Second, func() {
|
||||
run(w)
|
||||
})
|
||||
func run(w webview.WebView) {
|
||||
if len(riv_ctrl_path) > 0 {
|
||||
get_self(w)
|
||||
get_peers(w)
|
||||
}
|
||||
_ = time.AfterFunc(10*time.Second, func() {
|
||||
run(w)
|
||||
})
|
||||
}
|
||||
|
||||
func run_command(command string) []byte{
|
||||
func run_command(command string) []byte {
|
||||
args := []string{"-json", command}
|
||||
cmd := exec.Command(riv_ctrl_path, args...)
|
||||
out, err := cmd.CombinedOutput()
|
||||
|
@ -194,26 +196,26 @@ func run_command(command string) []byte{
|
|||
return out
|
||||
}
|
||||
|
||||
func run_command_with_arg(command string, arg string) []byte{
|
||||
func run_command_with_arg(command string, arg string) []byte {
|
||||
args := []string{"-json", command, arg}
|
||||
cmd := exec.Command(riv_ctrl_path, args...)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
//log.Fatalf("command failed: %s\n", riv_ctrl_path+" "+strings.Join(args, " "))
|
||||
//log.Fatalf("command failed: %s\n", riv_ctrl_path+" "+strings.Join(args, " "))
|
||||
return []byte(err.Error())
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func add_peers(uri string){
|
||||
run_command_with_arg("addpeers", "uri="+uri)
|
||||
func add_peers(uri string) {
|
||||
run_command_with_arg("addpeers", "uri="+uri)
|
||||
}
|
||||
|
||||
func remove_peers(){
|
||||
func remove_peers() {
|
||||
run_command("removepeers")
|
||||
}
|
||||
|
||||
func get_self(w webview.WebView){
|
||||
func get_self(w webview.WebView) {
|
||||
|
||||
res := &admin.GetSelfResponse{}
|
||||
out := run_command("getSelf")
|
||||
|
@ -231,7 +233,7 @@ func get_self(w webview.WebView){
|
|||
//go setFieldValue(w, "peers", string(out))
|
||||
}
|
||||
|
||||
func get_peers(w webview.WebView){
|
||||
func get_peers(w webview.WebView) {
|
||||
|
||||
res := &admin.GetPeersResponse{}
|
||||
out := run_command("getPeers")
|
||||
|
@ -242,11 +244,11 @@ func get_peers(w webview.WebView){
|
|||
|
||||
var m []string
|
||||
for _, s := range res.Peers {
|
||||
m=append(m, s.Remote)
|
||||
m = append(m, s.Remote)
|
||||
}
|
||||
for k := range m {
|
||||
// Loop
|
||||
fmt.Println(k)
|
||||
// Loop
|
||||
fmt.Println(k)
|
||||
}
|
||||
inner_html := strings.Join(m[:], "<br>")
|
||||
strings.Join(m[:], "<br>")
|
||||
|
@ -255,12 +257,12 @@ func get_peers(w webview.WebView){
|
|||
|
||||
func setFieldValue(p webview.WebView, id string, value string) {
|
||||
p.Dispatch(func() {
|
||||
p.Eval("setFieldValue('"+id+"','"+value+"');")
|
||||
p.Eval("setFieldValue('" + id + "','" + value + "');")
|
||||
})
|
||||
}
|
||||
|
||||
func setPingValue(p webview.WebView, peer string, value string) {
|
||||
p.Dispatch(func() {
|
||||
p.Eval("setPingValue('"+peer+"','"+value+"');")
|
||||
p.Eval("setPingValue('" + peer + "','" + value + "');")
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue