ws-siemens/main.go
Gašper Dobrovoljc 0c0d82db42
Initial commit
2023-03-13 14:50:49 +01:00

88 lines
1.5 KiB
Go

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))
}