Переглянути джерело

портировал на gopherjs, буду встраивать в tri

kpmy 10 роки тому
батько
коміт
737b8597f6
6 змінених файлів з 82 додано та 25 видалено
  1. 4 0
      gopherjs_build.bat
  2. 5 4
      ncl/std/elems.go
  3. 13 8
      ncl/tool/x.go
  4. 37 0
      portable/data.go
  5. 21 12
      sim.go
  6. 2 1
      web/main.dart

+ 4 - 0
gopherjs_build.bat

@@ -0,0 +1,4 @@
+@echo off
+gopherjs build
+copy sim3.js web\go /Y
+copy sim3.js.map web\go /Y

+ 5 - 4
ncl/std/elems.go

@@ -3,7 +3,7 @@ package std
 import (
 	"fmt"
 	"reflect"
-	"sim3/api"
+	//	"sim3/api"
 	"sim3/ncl"
 	"sim3/tri"
 	"ypk/assert"
@@ -46,13 +46,14 @@ func Probe(n string) (ret ncl.Element) {
 }
 
 func (p *probe) Do() {
-	signal := p.I.Select()
+	/* signal := p.I.Select()
 	meta := signal != nil
 	sig := tri.FALSE
 	if meta {
 		sig = *signal
-	}
-	api.Log(&api.Item{Name: p.name, Type: "probe", Meta: meta, Signal: sig})
+	} */
+	//fmt.Println(p.name, meta, sig)
+	//	api.Log(&api.Item{Name: p.name, Type: "probe", Meta: meta, Signal: sig})
 }
 
 func (p *probe) String() string {

+ 13 - 8
ncl/tool/x.go

@@ -3,9 +3,6 @@ package tool
 import (
 	"gopkg.in/yaml.v2"
 	"hash/fnv"
-	"io/ioutil"
-	"os"
-	"path/filepath"
 	"reflect"
 	"sim3/ncl"
 	"sim3/ncl/std"
@@ -15,6 +12,10 @@ import (
 
 type Import func(...interface{}) ncl.Element
 
+type DataSource interface {
+	Get(name string) (data []byte, err error)
+}
+
 var imps map[string]Import = make(map[string]Import)
 
 func Simple(f func() ncl.Element) Import {
@@ -63,6 +64,7 @@ type Solder struct {
 	ent  map[string]ncl.Element
 	root ncl.Compound
 	pins map[ncl.PinCode]PinClosure
+	Data DataSource
 }
 
 type Pin map[string]string
@@ -189,16 +191,19 @@ func (s *Solder) Y(y string) {
 	s.parse(y)
 }
 
+var Src DataSource
+
 func (s *Solder) F(fn string) {
 	if s.root == nil {
 		s.init()
 	}
-	path, _ := os.Getwd()
-	input, err := os.Open(filepath.Join(path, "netlist", fn))
-	assert.For(err == nil, 40, path, fn)
-	data, _ := ioutil.ReadAll(input)
+	if s.Data == nil {
+		s.Data = Src
+	}
+	assert.For(s.Data != nil, 20)
+	data, _ := s.Data.Get(fn)
 	nl := &NetList{}
-	err = yaml.Unmarshal(data, nl)
+	err := yaml.Unmarshal(data, nl)
 	assert.For(err == nil, 41, err)
 	s.handle(nl)
 }

+ 37 - 0
portable/data.go

@@ -0,0 +1,37 @@
+package portable
+
+import (
+	"io/ioutil"
+	"net/http"
+	"os"
+	"path/filepath"
+	"ypk/assert"
+)
+
+type Data interface {
+	Get(name string) (data []byte, err error)
+}
+
+type httpData struct{}
+
+func (d *httpData) Get(n string) (data []byte, err error) {
+	resp, err := http.Get("../netlist/" + n)
+	assert.For(err == nil && resp.StatusCode == http.StatusOK, 40)
+	return ioutil.ReadAll(resp.Body)
+}
+
+var DataSource Data
+
+type fileData struct{}
+
+func (f *fileData) Get(fn string) (data []byte, err error) {
+	path, _ := os.Getwd()
+	input, err := os.Open(filepath.Join(path, "netlist", fn))
+	assert.For(err == nil, 40, path, fn)
+	return ioutil.ReadAll(input)
+}
+
+func init() {
+	DataSource = &httpData{}
+	//DataSource = &fileData{}
+}

+ 21 - 12
sim.go

@@ -1,19 +1,23 @@
 package main
 
 import (
-	"github.com/ivpusic/neo"
-	"github.com/ivpusic/neo-cors"
-	"runtime"
-	"sim3/api"
+	"log"
+	//	"github.com/ivpusic/neo"
+	//	"github.com/ivpusic/neo-cors"
+	//"runtime"
+	//	"sim3/api"
+	"github.com/gopherjs/gopherjs/js"
 	_ "sim3/ncl/extra"
 	"sim3/ncl/tool"
+	"sim3/portable"
 	"sync"
 )
 
 var wg *sync.WaitGroup = &sync.WaitGroup{}
 
 func init() {
-	runtime.GOMAXPROCS(1)
+	tool.Src = portable.DataSource
+	//runtime.GOMAXPROCS(1)
 	wg.Add(1)
 }
 
@@ -23,13 +27,18 @@ func load() {
 }
 
 func main() {
-	nw := func() {
-		app := neo.App()
-		app.Use(cors.Init())
-		app.Get("/tri.json", api.Tri)
-		app.Start()
-	}
-	go nw()
+	js.Global.Get("self")
+	log.Println("sim3 started")
+
+	/*	nw := func() {
+			app := neo.App()
+			app.Use(cors.Init())
+			app.Get("/tri.json", api.Tri)
+			app.Start()
+		}
+		go nw()
+	*/
 	load()
 	wg.Wait()
+	log.Println("sim3 closed")
 }

+ 2 - 1
web/main.dart

@@ -74,5 +74,6 @@ main() async{
     ..catchError((e){});
     new Future.delayed(new Duration(milliseconds: 300), get);
   };
-  get();
+  //get();
+  new Worker("go/sim3.js");
 }