2021-05-03 22:15:11 -04:00
|
|
|
package cfgcommon
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2021-10-28 06:34:19 -04:00
|
|
|
|
2021-05-03 22:15:11 -04:00
|
|
|
"github.com/v2fly/v2ray-core/v4/common"
|
|
|
|
"github.com/v2fly/v2ray-core/v4/infra/conf/geodata"
|
|
|
|
)
|
|
|
|
|
|
|
|
type configureLoadingContext int
|
|
|
|
|
|
|
|
const confContextKey = configureLoadingContext(1)
|
|
|
|
|
|
|
|
type configureLoadingEnvironment struct {
|
|
|
|
geoLoader geodata.Loader
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *configureLoadingEnvironment) GetGeoLoader() geodata.Loader {
|
|
|
|
if c.geoLoader == nil {
|
|
|
|
var err error
|
|
|
|
c.geoLoader, err = geodata.GetGeoDataLoader("standard")
|
|
|
|
common.Must(err)
|
|
|
|
}
|
|
|
|
return c.geoLoader
|
|
|
|
}
|
|
|
|
|
2021-06-24 11:28:08 -04:00
|
|
|
func (c *configureLoadingEnvironment) doNotImpl() {}
|
|
|
|
|
|
|
|
type ConfigureLoadingEnvironmentCapabilitySet interface {
|
2021-05-03 22:15:11 -04:00
|
|
|
GetGeoLoader() geodata.Loader
|
|
|
|
}
|
|
|
|
|
2021-06-24 11:28:08 -04:00
|
|
|
type ConfigureLoadingEnvironment interface {
|
|
|
|
ConfigureLoadingEnvironmentCapabilitySet
|
|
|
|
doNotImpl()
|
|
|
|
|
|
|
|
// TODO environment.BaseEnvironmentCapabilitySet
|
|
|
|
// TODO environment.FileSystemCapabilitySet
|
|
|
|
}
|
|
|
|
|
2021-05-03 22:15:11 -04:00
|
|
|
func NewConfigureLoadingContext(ctx context.Context) context.Context {
|
|
|
|
environment := &configureLoadingEnvironment{}
|
|
|
|
return context.WithValue(ctx, confContextKey, environment)
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetConfigureLoadingEnvironment(ctx context.Context) ConfigureLoadingEnvironment {
|
|
|
|
return ctx.Value(confContextKey).(ConfigureLoadingEnvironment)
|
|
|
|
}
|
|
|
|
|
|
|
|
func SetGeoDataLoader(ctx context.Context, loader geodata.Loader) {
|
|
|
|
GetConfigureLoadingEnvironment(ctx).(*configureLoadingEnvironment).geoLoader = loader
|
|
|
|
}
|