From ea69ddc25d68f3f432cc051f7c8065f6709ec226 Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 29 May 2025 22:25:36 +0200 Subject: [PATCH] Removed old code and adjustet to new system --- MessageHandler/handler.go | 139 -------------------------------------- go.mod | 7 +- go.sum | 5 +- main.go | 52 +++++++------- 4 files changed, 31 insertions(+), 172 deletions(-) delete mode 100644 MessageHandler/handler.go diff --git a/MessageHandler/handler.go b/MessageHandler/handler.go deleted file mode 100644 index 1688a65..0000000 --- a/MessageHandler/handler.go +++ /dev/null @@ -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, ";") -} diff --git a/go.mod b/go.mod index a59f9c8..31e2fea 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,16 @@ -module serialToWebsocket +module serialAlox go 1.23.6 require ( - github.com/gorilla/websocket v1.5.3 + github.com/stretchr/testify v1.7.0 go.bug.st/serial v1.6.2 ) require ( 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 + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect ) diff --git a/go.sum b/go.sum index 8434e89..95d3bb7 100644 --- a/go.sum +++ b/go.sum @@ -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/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/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/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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8= 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/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/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index bd55b97..96aa365 100644 --- a/main.go +++ b/main.go @@ -1,44 +1,38 @@ package main import ( + "fmt" "log" "net/http" - "serialToWebsocket/MessageHandler" - serialinteraction "serialToWebsocket/SerialInteraction" - - "github.com/gorilla/websocket" + parser "serialAlox/Parser" + serialinteraction "serialAlox/SerialInteraction" ) -var upgrader = websocket.Upgrader{ - CheckOrigin: func(r *http.Request) bool { - return true // for debuggin allow all - }, +type MainConfig struct { + Debug bool + Port int } -type Main struct { - handle *MessageHandler.MessageHandler -} - -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 +func NewMainConfig() *MainConfig { + return &MainConfig{ + Debug: false, + Port: 8080, } - defer c.Close() - - m.handle.WebsocketHandle(w, r, c) } func main() { - handlerOb := MessageHandler.MessageHandler{ - Serial: &serialinteraction.SerialConnection{}, - } - ma := Main{ - handle: &handlerOb, - } + mc := NewMainConfig() + mc.Debug = true - http.HandleFunc("/ws", ma.websock) - log.Printf("Server gestaret auf :8080") - log.Fatal(http.ListenAndServe(":8080", nil)) + sc := serialinteraction.SerialConnection{} + msConf := NewMessageHandlerConfig() + + 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)) }