controller.go 842 B

12345678910111213141516171819202122232425262728293031
  1. package controller
  2. import (
  3. "github.com/v2ray/v2ray-core/app"
  4. "github.com/v2ray/v2ray-core/app/internal"
  5. )
  6. // A SpaceController is supposed to be used by a shell to create Spaces. It should not be used
  7. // directly by proxies.
  8. type SpaceController struct {
  9. packetDispatcher internal.PacketDispatcherWithContext
  10. dnsCache internal.DnsCacheWithContext
  11. }
  12. func New() *SpaceController {
  13. return new(SpaceController)
  14. }
  15. func (this *SpaceController) Bind(object interface{}) {
  16. if packetDispatcher, ok := object.(internal.PacketDispatcherWithContext); ok {
  17. this.packetDispatcher = packetDispatcher
  18. }
  19. if dnsCache, ok := object.(internal.DnsCacheWithContext); ok {
  20. this.dnsCache = dnsCache
  21. }
  22. }
  23. func (this *SpaceController) ForContext(tag string) app.Space {
  24. return internal.NewSpace(tag, this.packetDispatcher, this.dnsCache)
  25. }