@@ -26,8 +26,8 @@ import (
26
26
"time"
27
27
28
28
"github.com/arduino/arduino-cli/arduino/cores/packageindex"
29
-
30
29
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
30
+ "github.com/arduino/arduino-cli/arduino/discovery"
31
31
"github.com/arduino/arduino-cli/arduino/libraries"
32
32
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
33
33
"github.com/arduino/arduino-cli/configs"
@@ -46,10 +46,11 @@ var instancesCount int32 = 1
46
46
// instantiate as many as needed by providing a different configuration
47
47
// for each one.
48
48
type CoreInstance struct {
49
- config * configs.Configuration
50
- pm * packagemanager.PackageManager
51
- lm * librariesmanager.LibrariesManager
52
- getLibOnly bool
49
+ config * configs.Configuration
50
+ pm * packagemanager.PackageManager
51
+ lm * librariesmanager.LibrariesManager
52
+ getLibOnly bool
53
+ discoveries []* discovery.Discovery
53
54
}
54
55
55
56
type InstanceContainer interface {
@@ -72,6 +73,32 @@ func GetLibraryManager(req InstanceContainer) *librariesmanager.LibrariesManager
72
73
return i .lm
73
74
}
74
75
76
+ func GetDiscoveries (req InstanceContainer ) []* discovery.Discovery {
77
+ i , ok := instances [req .GetInstance ().GetId ()]
78
+ if ! ok {
79
+ return nil
80
+ }
81
+ return i .discoveries
82
+ }
83
+
84
+ func (instance * CoreInstance ) startDiscoveries (downloadCB DownloadProgressCB , taskCB TaskProgressCB ) error {
85
+ discoveriesToStop := instance .discoveries
86
+ discoveriesToStart := discovery .ExtractDiscoveriesFromPlatforms (instance .pm )
87
+
88
+ instance .discoveries = []* discovery.Discovery {}
89
+ for _ , disc := range discoveriesToStart {
90
+ sharedDisc , err := StartSharedDiscovery (disc )
91
+ if err != nil {
92
+ return fmt .Errorf ("starting discovery: %s" , err )
93
+ }
94
+ instance .discoveries = append (instance .discoveries , sharedDisc )
95
+ }
96
+ for _ , disc := range discoveriesToStop {
97
+ StopSharedDiscovery (disc )
98
+ }
99
+ return nil
100
+ }
101
+
75
102
func Init (ctx context.Context , req * rpc.InitReq , downloadCB DownloadProgressCB , taskCB TaskProgressCB ) (* rpc.InitResp , error ) {
76
103
inConfig := req .GetConfiguration ()
77
104
if inConfig == nil {
@@ -108,6 +135,10 @@ func Init(ctx context.Context, req *rpc.InitReq, downloadCB DownloadProgressCB,
108
135
instancesCount ++
109
136
instances [handle ] = instance
110
137
138
+ if err := instance .startDiscoveries (downloadCB , taskCB ); err != nil {
139
+ // TODO: handle discovery errors
140
+ fmt .Println (err )
141
+ }
111
142
return & rpc.InitResp {
112
143
Instance : & rpc.Instance {Id : handle },
113
144
PlatformsIndexErrors : reqPltIndex ,
@@ -120,6 +151,11 @@ func Destroy(ctx context.Context, req *rpc.DestroyReq) (*rpc.DestroyResp, error)
120
151
if _ , ok := instances [id ]; ! ok {
121
152
return nil , fmt .Errorf ("invalid handle" )
122
153
}
154
+
155
+ for _ , disc := range GetDiscoveries (req ) {
156
+ StopSharedDiscovery (disc )
157
+ }
158
+
123
159
delete (instances , id )
124
160
return & rpc.DestroyResp {}, nil
125
161
}
@@ -207,6 +243,9 @@ func Rescan(ctx context.Context, req *rpc.RescanReq) (*rpc.RescanResp, error) {
207
243
}
208
244
coreInstance .pm = pm
209
245
coreInstance .lm = lm
246
+
247
+ coreInstance .startDiscoveries (nil , nil )
248
+
210
249
return & rpc.RescanResp {
211
250
PlatformsIndexErrors : reqPltIndex ,
212
251
LibrariesIndexError : reqLibIndex ,
0 commit comments