1818package client
1919
2020import (
21- "context"
2221 "errors"
22+ "github.com/optimizely/go-sdk/optimizely/utils"
2323
2424 "github.com/optimizely/go-sdk/optimizely/event"
2525
@@ -32,7 +32,6 @@ import (
3232
3333// Options are used to create an instance of the OptimizelyClient with custom configuration
3434type Options struct {
35- Context context.Context
3635 ProjectConfigManager optimizely.ProjectConfigManager
3736 DecisionService decision.Service
3837 EventProcessor event.Processor
@@ -76,19 +75,11 @@ func (f OptimizelyFactory) StaticClient() (*OptimizelyClient, error) {
7675
7776// ClientWithOptions returns a client initialized with the given configuration options
7877func (f OptimizelyFactory ) ClientWithOptions (clientOptions Options ) (* OptimizelyClient , error ) {
79- client := & OptimizelyClient {
80- isValid : false ,
81- }
8278
83- var ctx context.Context
84- if clientOptions .Context != nil {
85- ctx = clientOptions .Context
86- } else {
87- // if no context is provided, we create our own cancellable context and hand it over to the client so the client can shut down its child processes
88- ctx = context .Background ()
89- var cancel context.CancelFunc
90- ctx , cancel = context .WithCancel (ctx )
91- client .cancelFunc = cancel
79+ executionCtx := utils .NewCancelableExecutionCtx ()
80+ client := & OptimizelyClient {
81+ isValid : false ,
82+ executionCtx : executionCtx ,
9283 }
9384
9485 notificationCenter := notification .NewNotificationCenter ()
@@ -100,7 +91,7 @@ func (f OptimizelyFactory) ClientWithOptions(clientOptions Options) (*Optimizely
10091 options := config.PollingProjectConfigManagerOptions {
10192 Datafile : f .Datafile ,
10293 }
103- client .configManager = config .NewPollingProjectConfigManagerWithOptions (ctx , f .SDKKey , options )
94+ client .configManager = config .NewPollingProjectConfigManagerWithOptions (executionCtx , f .SDKKey , options )
10495 case f .Datafile != nil :
10596 staticConfigManager , _ := config .NewStaticProjectConfigManagerFromPayload (f .Datafile )
10697 client .configManager = staticConfigManager
@@ -117,7 +108,7 @@ func (f OptimizelyFactory) ClientWithOptions(clientOptions Options) (*Optimizely
117108 if clientOptions .EventProcessor != nil {
118109 client .eventProcessor = clientOptions .EventProcessor
119110 } else {
120- client .eventProcessor = event .NewEventProcessor (ctx , event .DefaultBatchSize , event .DefaultEventQueueSize , event .DefaultEventFlushInterval )
111+ client .eventProcessor = event .NewEventProcessor (executionCtx , event .DefaultBatchSize , event .DefaultEventQueueSize , event .DefaultEventFlushInterval )
121112 }
122113
123114 client .isValid = true
0 commit comments