controller.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. pubsub internal.PubsubWithContext
  12. inboundHandlerManager internal.InboundHandlerManagerWithContext
  13. }
  14. func New() *SpaceController {
  15. return new(SpaceController)
  16. }
  17. func (this *SpaceController) Bind(object interface{}) {
  18. if packetDispatcher, ok := object.(internal.PacketDispatcherWithContext); ok {
  19. this.packetDispatcher = packetDispatcher
  20. }
  21. if dnsCache, ok := object.(internal.DnsCacheWithContext); ok {
  22. this.dnsCache = dnsCache
  23. }
  24. if pubsub, ok := object.(internal.PubsubWithContext); ok {
  25. this.pubsub = pubsub
  26. }
  27. if inboundHandlerManager, ok := object.(internal.InboundHandlerManagerWithContext); ok {
  28. this.inboundHandlerManager = inboundHandlerManager
  29. }
  30. }
  31. func (this *SpaceController) ForContext(tag string) app.Space {
  32. return internal.NewSpace(tag, this.packetDispatcher, this.dnsCache, this.pubsub, this.inboundHandlerManager)
  33. }