Removed old code and adjustet to new system

This commit is contained in:
simon 2025-05-29 22:25:36 +02:00
parent 571d32b467
commit ea69ddc25d
4 changed files with 31 additions and 172 deletions

View File

@ -1,139 +0,0 @@
package MessageHandler
import (
"fmt"
"log"
"net/http"
"strconv"
"strings"
"sync"
"github.com/gorilla/websocket"
)
type SerialInteraction interface {
ListComports() []string
Connect(string) error
Disconnect()
Write([]byte) (int, error)
Read([]byte) (int, error)
GetPortPath() string
}
type MessageHandler struct {
Serial SerialInteraction
socket *websocket.Conn
socketLock sync.Mutex
}
const (
VERSION = "1"
)
func (mh *MessageHandler) WebsocketHandle(w http.ResponseWriter, r *http.Request, c *websocket.Conn) {
for {
mt, message, err := c.ReadMessage()
if err != nil {
log.Printf("read: %v", err)
break
}
log.Printf("recv: %s", message)
answer := mh.messageDispatcher(string(message))
mh.socketLock.Lock()
err = c.WriteMessage(mt, []byte(answer))
mh.socketLock.Unlock()
if err != nil {
log.Printf("write: %v", err)
break
}
}
}
// message format, ";" seperated message version;command;argc;args....?
func (mh *MessageHandler) messageDispatcher(message string) string {
messageParts := strings.Split(message, ";")
if len(messageParts) < 3 {
log.Printf("Message to Short, %v", message)
return ""
}
switch messageParts[0] {
case VERSION:
break
default:
log.Printf("Unknow Version %v in Message %v", messageParts[0], message)
return ""
}
switch messageParts[1] {
case "listports":
return mh.ListComports()
case "connect":
return mh.Connect(messageParts[4])
case "disconnect":
return mh.Disconnect()
case "write":
return mh.Write(messageParts[4])
case "read":
return mh.Read()
default:
log.Printf("unknow command %v", message)
break
}
return ""
}
func (mh *MessageHandler) ListComports() string {
ports := mh.Serial.ListComports()
message := MessageBuilder("portlist", ports...)
return message
}
func (mh *MessageHandler) Connect(portname string) string {
err := mh.Serial.Connect(portname)
message := ""
if err != nil {
message = MessageBuilder("error", "connection")
} else {
message = MessageBuilder("connected", "portname")
}
return message
}
func (mh *MessageHandler) Disconnect() string {
mh.Serial.Disconnect()
return MessageBuilder("disconnected")
}
func (mh *MessageHandler) Write(msg string) string {
_, err := mh.Serial.Write([]byte(msg))
if err != nil {
return MessageBuilder("write", fmt.Sprintf("write error %v", err))
}
return MessageBuilder("write")
}
func (mh *MessageHandler) Read() string {
buffer := make([]byte, 1024)
_, err := mh.Serial.Read(buffer)
if err != nil {
return MessageBuilder("read", fmt.Sprintf("read error %v", err))
}
return MessageBuilder("read", string(buffer))
}
// version;command;argc;argv;
// recv: 1;connect;1;/dev/ttyUSB0;
// send: 1;connected;0; // no args can be used as a acc command
// send: 1;connected;1;error: port not found;
// recv: 1;discoonect;0;
// send: 1;discoonect;0;
// recv: 1;write;1;viele viele bunte bytes;
// send: 1;write;0;
// send: 1;write;1;error: port not connected;
// send: 1:read:1;das hab ich gelesen junge;
func MessageBuilder(command string, args ...string) string {
return VERSION + ";" + command + ";" + strconv.Itoa(len(args)) + ";" + strings.Join(args, ";")
}

7
go.mod
View File

@ -1,13 +1,16 @@
module serialToWebsocket module serialAlox
go 1.23.6 go 1.23.6
require ( require (
github.com/gorilla/websocket v1.5.3 github.com/stretchr/testify v1.7.0
go.bug.st/serial v1.6.2 go.bug.st/serial v1.6.2
) )
require ( require (
github.com/creack/goselect v0.1.2 // indirect github.com/creack/goselect v0.1.2 // indirect
github.com/davecgh/go-spew v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
) )

5
go.sum
View File

@ -2,15 +2,16 @@ github.com/creack/goselect v0.1.2 h1:2DNy14+JPjRBgPzAd1thbQp4BSIihxcBf0IXhQXDRa0
github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY= github.com/creack/goselect v0.1.2/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8= go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8=
go.bug.st/serial v1.6.2/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE= go.bug.st/serial v1.6.2/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE=
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY=
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

52
main.go
View File

@ -1,44 +1,38 @@
package main package main
import ( import (
"fmt"
"log" "log"
"net/http" "net/http"
"serialToWebsocket/MessageHandler" parser "serialAlox/Parser"
serialinteraction "serialToWebsocket/SerialInteraction" serialinteraction "serialAlox/SerialInteraction"
"github.com/gorilla/websocket"
) )
var upgrader = websocket.Upgrader{ type MainConfig struct {
CheckOrigin: func(r *http.Request) bool { Debug bool
return true // for debuggin allow all Port int
},
} }
type Main struct { func NewMainConfig() *MainConfig {
handle *MessageHandler.MessageHandler return &MainConfig{
} Debug: false,
Port: 8080,
func (m *Main) websock(w http.ResponseWriter, r *http.Request) {
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("upgrade: %v", err)
return
} }
defer c.Close()
m.handle.WebsocketHandle(w, r, c)
} }
func main() { func main() {
handlerOb := MessageHandler.MessageHandler{ mc := NewMainConfig()
Serial: &serialinteraction.SerialConnection{}, mc.Debug = true
}
ma := Main{
handle: &handlerOb,
}
http.HandleFunc("/ws", ma.websock) sc := serialinteraction.SerialConnection{}
log.Printf("Server gestaret auf :8080") msConf := NewMessageHandlerConfig()
log.Fatal(http.ListenAndServe(":8080", nil))
msParserConf := parser.NewParserConfig()
msParser := parser.NewParser(*msParserConf)
//msHandler := NewMessageHandler(&sc, *msConf)
_ = NewMessageHandler(&sc, *msConf, msParser)
log.Printf("Started Server on %d", mc.Port)
connectString := fmt.Sprintf(":%d", mc.Port)
log.Fatal(http.ListenAndServe(connectString, nil))
} }