package main import ( "fmt" "log" "net/http" "time" "github.com/danclive/snap7-go" "github.com/gapidobri/siemens-ws/hardware" "github.com/gorilla/websocket" ) var ( upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } clients = []chan uint16{} ) func main() { siemens, err := snap7.ConnentTo("192.168.117.222", 0, 1, 0) if err != nil { fmt.Println(err) } // client := hardware.NewClient(hardware.NewMock()) client := hardware.NewSiemens(siemens) go func() { for { val, err := client.Read() if err != nil { log.Println("read err:", err) } fmt.Println(val) for _, c := range clients { c <- val } time.Sleep(time.Millisecond * 100) } }() http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Println("open handler") c, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("upgrade err:", err) return } defer c.Close() dataCh := make(chan uint16) clients = append(clients, dataCh) for { val, more := <-dataCh if !more { break } err = c.WriteMessage(websocket.TextMessage, []byte(fmt.Sprintf("%d", val))) if err != nil { log.Println("write err:", err) fmt.Println("close handler") c.Close() close(dataCh) for i, c := range clients { if c == dataCh { clients = append(clients[:i], clients[i+1:]...) break } } } } }) log.Fatal(http.ListenAndServe(":1234", nil)) }