mirror of
https://github.com/postmannen/ctrl.git
synced 2024-12-14 12:37:31 +00:00
first concept of receiving messages from end nodes
This commit is contained in:
parent
042aee0c29
commit
271447d42d
8 changed files with 65 additions and 14 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
textlogging.go
|
||||||
|
ship1/
|
||||||
|
ship2/
|
15
cmd/main.go
15
cmd/main.go
|
@ -14,8 +14,8 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
nodeName := flag.String("node", "0", "some unique string to identify this Edge unit")
|
nodeName := flag.String("node", "0", "some unique string to identify this Edge unit")
|
||||||
brokerAddress := flag.String("brokerAddress", "0", "the address of the message broker")
|
brokerAddress := flag.String("brokerAddress", "0", "the address of the message broker")
|
||||||
modePublisher := flag.Bool("modePublisher", false, "set to true if it should be able to publish")
|
// modePublisher := flag.Bool("modePublisher", false, "set to true if it should be able to publish")
|
||||||
modeSubscriber := flag.Bool("modeSubscriber", false, "set to true if it should be able to subscribe")
|
// modeSubscriber := flag.Bool("modeSubscriber", false, "set to true if it should be able to subscribe")
|
||||||
profilingPort := flag.String("profilingPort", "", "The number of the profiling port")
|
profilingPort := flag.String("profilingPort", "", "The number of the profiling port")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
@ -34,13 +34,12 @@ func main() {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if *modePublisher {
|
// Start the messaging server
|
||||||
go s.PublisherStart()
|
go s.Start()
|
||||||
}
|
|
||||||
|
|
||||||
if *modeSubscriber {
|
//if *modeSubscriber {
|
||||||
go s.RunSubscriber()
|
// go s.RunSubscriber()
|
||||||
}
|
//}
|
||||||
|
|
||||||
select {}
|
select {}
|
||||||
}
|
}
|
||||||
|
|
15
example-inmessage/orig-central.json
Normal file
15
example-inmessage/orig-central.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"subject":
|
||||||
|
{
|
||||||
|
"node":"central",
|
||||||
|
"messageKind":"event",
|
||||||
|
"method":"textlogging"
|
||||||
|
},
|
||||||
|
"message":
|
||||||
|
{
|
||||||
|
"data": ["some message sent from a ship"],
|
||||||
|
"messageType":"Event"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
|
@ -8,7 +8,7 @@
|
||||||
},
|
},
|
||||||
"message":
|
"message":
|
||||||
{
|
{
|
||||||
"data": ["bash","-c","ls -l"],
|
"data": ["bash","-c","ls -l ../"],
|
||||||
"messageType":"Command"
|
"messageType":"Command"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
},
|
},
|
||||||
"message":
|
"message":
|
||||||
{
|
{
|
||||||
"data": ["bash","-c","tree"],
|
"data": ["bash","-c","tree ../"],
|
||||||
"messageType":"Command"
|
"messageType":"Command"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
publisher.go
33
publisher.go
|
@ -72,6 +72,8 @@ type server struct {
|
||||||
errorCh chan errProcess
|
errorCh chan errProcess
|
||||||
// errorKernel
|
// errorKernel
|
||||||
errorKernel *errorKernel
|
errorKernel *errorKernel
|
||||||
|
// TODO: replace this with some structure to hold the logCh value
|
||||||
|
logCh chan []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// newServer will prepare and return a server type
|
// newServer will prepare and return a server type
|
||||||
|
@ -87,6 +89,7 @@ func NewServer(brokerAddress string, nodeName string) (*server, error) {
|
||||||
processes: make(map[subjectName]process),
|
processes: make(map[subjectName]process),
|
||||||
newMessagesCh: make(chan []jsonFromFile),
|
newMessagesCh: make(chan []jsonFromFile),
|
||||||
errorCh: make(chan errProcess, 2),
|
errorCh: make(chan errProcess, 2),
|
||||||
|
logCh: make(chan []byte),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the error kernel that will do all the error handling
|
// Start the error kernel that will do all the error handling
|
||||||
|
@ -98,10 +101,36 @@ func NewServer(brokerAddress string, nodeName string) (*server, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *server) PublisherStart() {
|
func (s *server) Start() {
|
||||||
// Start the checking the input file for new messages from operator.
|
// Start the checking the input file for new messages from operator.
|
||||||
go s.getMessagesFromFile("./", "inmsg.txt", s.newMessagesCh)
|
go s.getMessagesFromFile("./", "inmsg.txt", s.newMessagesCh)
|
||||||
|
|
||||||
|
// Start the textlogging service that will run on the subscribers
|
||||||
|
// TODO: Figure out how to structure event services like these
|
||||||
|
|
||||||
|
go s.startTextLogging(s.logCh)
|
||||||
|
|
||||||
|
// Start a subscriber for shellCommand messages
|
||||||
|
{
|
||||||
|
fmt.Printf("nodeName: %#v\n", s.nodeName)
|
||||||
|
sub := newSubject(s.nodeName, "command", "shellcommand")
|
||||||
|
proc := s.processPrepareNew(sub, s.errorCh, processKindSubscriber)
|
||||||
|
// fmt.Printf("*** %#v\n", proc)
|
||||||
|
go s.processSpawnWorker(proc)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start a subscriber for textLogging messages
|
||||||
|
{
|
||||||
|
fmt.Printf("nodeName: %#v\n", s.nodeName)
|
||||||
|
sub := newSubject(s.nodeName, "event", "textlogging")
|
||||||
|
proc := s.processPrepareNew(sub, s.errorCh, processKindSubscriber)
|
||||||
|
// fmt.Printf("*** %#v\n", proc)
|
||||||
|
go s.processSpawnWorker(proc)
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Second * 2)
|
||||||
|
fmt.Printf("*** Output of processes map: %#v\n", s.processes)
|
||||||
|
|
||||||
// Prepare and start a single process
|
// Prepare and start a single process
|
||||||
//{
|
//{
|
||||||
// sub := newSubject("ship1", "command", "shellcommand")
|
// sub := newSubject("ship1", "command", "shellcommand")
|
||||||
|
@ -306,7 +335,7 @@ func (s *server) processSpawnWorker(proc process) {
|
||||||
// We start one handler per message received by using go routines here.
|
// We start one handler per message received by using go routines here.
|
||||||
// This is for being able to reply back the current publisher who sent
|
// This is for being able to reply back the current publisher who sent
|
||||||
// the message.
|
// the message.
|
||||||
go handler(s.natsConn, s.nodeName, msg)
|
go s.handler(s.natsConn, s.nodeName, msg)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error: Subscribe failed: %v\n", err)
|
log.Printf("error: Subscribe failed: %v\n", err)
|
||||||
|
|
|
@ -48,7 +48,7 @@ func (s *server) RunSubscriber() {
|
||||||
// the state of the message being processed, and then reply back to the
|
// the state of the message being processed, and then reply back to the
|
||||||
// correct sending process's reply, meaning so we ACK back to the correct
|
// correct sending process's reply, meaning so we ACK back to the correct
|
||||||
// publisher.
|
// publisher.
|
||||||
func handler(natsConn *nats.Conn, node string, msg *nats.Msg) {
|
func (s *server) handler(natsConn *nats.Conn, node string, msg *nats.Msg) {
|
||||||
|
|
||||||
message := Message{}
|
message := Message{}
|
||||||
|
|
||||||
|
@ -84,7 +84,11 @@ func handler(natsConn *nats.Conn, node string, msg *nats.Msg) {
|
||||||
// Send a confirmation message back to the publisher
|
// Send a confirmation message back to the publisher
|
||||||
natsConn.Publish(msg.Reply, []byte("confirmed from: "+node+": "+fmt.Sprintf("%v\n%s", message.ID, out)))
|
natsConn.Publish(msg.Reply, []byte("confirmed from: "+node+": "+fmt.Sprintf("%v\n%s", message.ID, out)))
|
||||||
case message.MessageType == "Event":
|
case message.MessageType == "Event":
|
||||||
fmt.Printf("info: the event type is not implemented yet\n")
|
fmt.Printf("info: sending over the message %#v\n", message)
|
||||||
|
|
||||||
|
for _, d := range message.Data {
|
||||||
|
s.logCh <- []byte(d)
|
||||||
|
}
|
||||||
|
|
||||||
// Send a confirmation message back to the publisher
|
// Send a confirmation message back to the publisher
|
||||||
natsConn.Publish(msg.Reply, []byte("confirmed from: "+node+": "+fmt.Sprint(message.ID)))
|
natsConn.Publish(msg.Reply, []byte("confirmed from: "+node+": "+fmt.Sprint(message.ID)))
|
||||||
|
|
1
textlogging.log
Normal file
1
textlogging.log
Normal file
|
@ -0,0 +1 @@
|
||||||
|
some message sent from a shipsome message sent from a ship
|
Loading…
Reference in a new issue