namespace.go 950 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package socketio
  2. // Namespace is the name space of a socket.io handler.
  3. type Namespace interface {
  4. // Name returns the name of the namespace.
  5. Name() string
  6. // Of returns the namespace with given name.
  7. Of(name string) Namespace
  8. // On registers the function f to handle an event.
  9. On(event string, f interface{}) error
  10. }
  11. type namespace struct {
  12. *baseHandler
  13. root map[string]Namespace
  14. }
  15. func newNamespace(broadcast BroadcastAdaptor) *namespace {
  16. ret := &namespace{
  17. baseHandler: newBaseHandler("", broadcast),
  18. root: make(map[string]Namespace),
  19. }
  20. ret.root[ret.Name()] = ret
  21. return ret
  22. }
  23. func (n *namespace) Name() string {
  24. return n.baseHandler.name
  25. }
  26. func (n *namespace) Of(name string) Namespace {
  27. if name == "/" {
  28. name = ""
  29. }
  30. if ret, ok := n.root[name]; ok {
  31. return ret
  32. }
  33. ret := &namespace{
  34. baseHandler: newBaseHandler(name, n.baseHandler.broadcast),
  35. root: n.root,
  36. }
  37. n.root[name] = ret
  38. return ret
  39. }