From 63c64aa6691fe5df28cac2c22d494b6666bc8ed2 Mon Sep 17 00:00:00 2001 From: postmannen Date: Thu, 11 Feb 2021 15:51:07 +0100 Subject: [PATCH] methods are being got'n from map, and executed if it exist --- methodType.go | 2 +- publisher.go | 40 ++++++---------------------------------- textlogging.log | 1 + 3 files changed, 8 insertions(+), 35 deletions(-) diff --git a/methodType.go b/methodType.go index eabb948..1571a99 100644 --- a/methodType.go +++ b/methodType.go @@ -57,7 +57,7 @@ func (ma MethodsAvailable) CheckIfExists(m Method) (methodHandler, bool) { // ------------------------------------------------------------ type methodHandler interface { - handler(*server, Message, string) ([]byte, error) + handler(server *server, message Message, node string) ([]byte, error) } type methodCommandShellCommand struct{} diff --git a/publisher.go b/publisher.go index 1680ae2..5bab5c0 100644 --- a/publisher.go +++ b/publisher.go @@ -7,7 +7,6 @@ import ( "fmt" "log" "os" - "os/exec" "sync" "time" @@ -423,40 +422,13 @@ func (s *server) subscriberHandler(natsConn *nats.Conn, node string, msg *nats.M // that there was a problem like missing method to handle a specific // method etc. switch { - case message.CommandOrEvent == Command: - out, err := func(s *server, message Message, node string) ([]byte, error) { - // Since the command to execute is at the first position in the - // slice we need to slice it out. The arguments are at the - // remaining positions. - c := message.Data[0] - a := message.Data[1:] - cmd := exec.Command(c, a...) - //cmd.Stdout = os.Stdout - out, err := cmd.CombinedOutput() - if err != nil { - log.Printf("error: execution of command failed: %v\n", err) - } - - outMsg := []byte(fmt.Sprintf("confirmed from node: %v: messageID: %v\n---\n%s---", node, message.ID, out)) - return outMsg, nil - }(s, message, node) - - if err != nil { - // TODO: Send to error kernel ? - log.Printf("error: failed to execute event: %v\n", err) + case message.CommandOrEvent == Command || message.CommandOrEvent == Event: + mf, ok := s.methodsAvailable.CheckIfExists(message.Method) + if !ok { + // TODO: Check how errors should be handled here!!! + log.Printf("*****METHOD MISSING \n") } - - // Send a confirmation message back to the publisher - natsConn.Publish(msg.Reply, out) - case message.CommandOrEvent == Event: - out, err := func(s *server, message Message, node string) ([]byte, error) { - for _, d := range message.Data { - s.logCh <- []byte(d) - } - - outMsg := []byte("confirmed from: " + node + ": " + fmt.Sprint(message.ID)) - return outMsg, nil - }(s, message, node) + out, err := mf.handler(s, message, node) if err != nil { // TODO: Send to error kernel ? diff --git a/textlogging.log b/textlogging.log index c8c87a4..d93f34a 100644 --- a/textlogging.log +++ b/textlogging.log @@ -16,3 +16,4 @@ some message sent from a ship for testing some message sent from a ship for testing some message sent from a ship for testing some message sent from a ship for testing +some message sent from a ship for testing