code: func (s *OscDispatcher) Dispatch(packet Packet) {
  	switch packet.(type) {
  	default:
  		return
  
  	case *Message:
  		msg, _ := packet.(*Message)
  		for addr, handler := range s.handlers {
  			if msg.Match(addr) {
  				handler.HandleMessage(msg)
  			}
  		}
  		if s.defaultHandler != nil {
  			s.defaultHandler.HandleMessage(msg)
  		}
  
  	case *Bundle:
  		bundle, _ := packet.(*Bundle)
  		timer := time.NewTimer(bundle.Timetag.ExpiresIn())
  
  		go func() {
  			<-timer.C
  			for _, message := range bundle.Messages {
  				for address, handler := range s.handlers {
  					if message.Match(address) {
  						handler.HandleMessage(message)
  					}
  				}
  				if s.defaultHandler != nil {
  					s.defaultHandler.HandleMessage(message)
  				}
  			}
  
  			// Process all bundles
  			for _, b := range bundle.Bundles {
  				s.Dispatch(b)
  			}
  		}()
  	}
  }
docs: // Dispatch dispatches OSC packets. Implements the Dispatcher interface.