@@ -15,10 +15,13 @@ import (
15
15
"github.com/kardianos/osext"
16
16
//"github.com/sanbornm/go-selfupdate/selfupdate" #included in update.go to change heavily
17
17
//"github.com/sanderhahn/gozip"
18
- "github.com/vharitonsky/iniflags"
19
18
"runtime/debug"
20
19
"text/template"
21
20
"time"
21
+
22
+ "github.com/kardianos/service"
23
+
24
+ "github.com/vharitonsky/iniflags"
22
25
)
23
26
24
27
var (
@@ -80,8 +83,61 @@ func launchSelfLater() {
80
83
log .Println ("Done waiting 5 secs. Now launching..." )
81
84
}
82
85
86
+ var logger service.Logger
87
+
88
+ type program struct {}
89
+
90
+ func (p * program ) Start (s service.Service ) error {
91
+ // Start should not block. Do the actual work async.
92
+ go p .run ()
93
+ return nil
94
+ }
95
+ func (p * program ) run () {
96
+ startDaemon ()
97
+ }
98
+ func (p * program ) Stop (s service.Service ) error {
99
+ // Stop should not block. Return with a few seconds.
100
+ <- time .After (time .Second * 13 )
101
+ return nil
102
+ }
103
+
83
104
func main () {
105
+ svcConfig := & service.Config {
106
+ Name : "ArduinoCreateBridge" ,
107
+ DisplayName : "Arduino Create Bridge" ,
108
+ Description : "A bridge that allows Arduino Create to operate on the boards connected to the computer" ,
109
+ }
110
+
111
+ prg := & program {}
112
+ s , err := service .New (prg , svcConfig )
113
+ if err != nil {
114
+ log .Fatal (err )
115
+ }
116
+ if len (os .Args ) > 1 {
117
+ err = service .Control (s , os .Args [1 ])
118
+ if err != nil {
119
+ log .Fatal (err )
120
+ }
121
+ return
122
+ }
123
+
124
+ logger , err = s .Logger (nil )
125
+ if err != nil {
126
+ log .Fatal (err )
127
+ }
128
+
129
+ err = s .Install ()
130
+ if err != nil {
131
+ logger .Error (err )
132
+ }
133
+
134
+ err = s .Run ()
135
+ if err != nil {
136
+ logger .Error (err )
137
+ }
138
+ }
84
139
140
+ func startDaemon () {
85
141
go func () {
86
142
87
143
// autoextract self
0 commit comments