123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package commands
- import (
- "fmt"
- "time"
- "encoding/json"
- "os"
- "path/filepath"
- . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/common"
- . "git.eugeniocarvalho.dev/eugeniucarvalho/apicodegen/gen"
- "github.com/fsnotify/fsnotify"
- "github.com/kataras/iris/v12"
- "github.com/kataras/iris/v12/middleware/logger"
- "github.com/kataras/iris/v12/middleware/recover"
- )
- var watcher, _ = fsnotify.NewWatcher()
- func serve() (err error) {
- var (
- project *Project
- // done = make(chan bool)
- )
- defer watcher.Close()
- fmt.Println("Serve WITH SETUP...")
- // Cria um novo projeto a partir do diretorio atual
- if project, err = CreateProject(); err != nil {
- panic(err)
- }
- // starting at the root of the project, walk each file/directory searching for
- // directories
- if err := filepath.Walk("./", watchDir); err != nil {
- fmt.Println("ERROR", err)
- }
- HubInstance.EventHandlers["initialize"] = func(hub *Hub, event *Event) {
- payload, err := json.Marshal(project)
- if err != nil {
- fmt.Println("error:", err)
- return
- }
-
- fmt.Println("run .. initialize")
- go func(){
- hub.Broadcast <- &Event{
- Kind : "project:update",
- Payload : string(payload),
- Date : time.Now(),
- }
- }()
- }
- go func() {
- count := 10
- for {
- select {
- case event, ok := <-watcher.Events:
- if !ok {
- return
- }
- // log.Println("event:", event)
-
- if event.Op & fsnotify.Write == fsnotify.Write {
- fmt.Println("modified file:", event.Name)
- fmt.Println("update...")
- time.Sleep(time.Second)
- if project, err = CreateProject(); err != nil {
- panic(err)
- }
-
- payload, err := json.Marshal(project)
- if err != nil {
- fmt.Println("error:", err)
- return
- }
- HubInstance.Broadcast <- &Event{
- Kind : "project:update",
- Payload : string(payload),
- Date : time.Now(),
- }
- }
-
- if count = count - 1; count == 0 {
- break
- }
- case err := <-watcher.Errors:
- fmt.Println("ERROR", err)
- }
- }
- }()
- app := iris.New()
- app.Logger().SetLevel("debug")
- // Optionally, add two built'n handlers
- // that can recover from any http-relative panics
- // and log the requests to the terminal.
- app.Use(recover.New())
- app.Use(logger.New())
- // Method: GET
- // Resource: http://localhost:8080/hello
- app.Get("/project", func(ctx iris.Context) {
- ctx.JSON(project)
- })
-
- app.Get("/ws", WsUpgrader)
- app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
- return
- }
- func watchDir(path string, fi os.FileInfo, err error) error {
-
- if fi.Mode().IsDir() {
- return watcher.Add(path)
- }
- return nil
- }
|