diff --git a/main.go b/main.go index f9bbe7b2..5dffe0bd 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ const ( configFile = "./arduino-connector.cfg" ) -func main() { +func (p *program) run() { var ( id = flag.String("id", "", "id of the thing in aws iot") uuid = flag.String("uuid", "", "A uuid generated the first time the connector is started") diff --git a/service.go b/service.go new file mode 100644 index 00000000..f3076213 --- /dev/null +++ b/service.go @@ -0,0 +1,53 @@ +// simple does nothing except block while running the service. +package main + +import ( + "log" + + "github.com/kardianos/osext" + "github.com/kardianos/service" +) + +var logger service.Logger + +type program struct{} + +// Start run the program asynchronously +func (p *program) Start(s service.Service) error { + go p.run() + return nil +} + +// Stop doesn nothing +func (p *program) Stop(s service.Service) error { + return nil +} + +func main() { + workingDirectory, _ := osext.ExecutableFolder() + + svcConfig := &service.Config{ + Name: "ArduinoConnector", + DisplayName: "Arduino Connector Service", + Description: "Cloud connector and launcher for Intel IoT devices.", + WorkingDirectory: workingDirectory, + } + + prg := &Program{} + s, err := service.New(prg, svcConfig) + if err != nil { + log.Fatal(err) + } + logger, err = s.Logger(nil) + if err != nil { + log.Fatal(err) + } + if service.Interactive() { + log.Println("Installing service") + s.Install() + } + err = s.Run() + if err != nil { + logger.Error(err) + } +}