1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-18 00:20:57 +03:00

feat: add protected handler support and rename command to pushNotificationName

- Add protected flag to RegisterHandler methods across all types
- Protected handlers cannot be unregistered, UnregisterHandler returns error
- Rename 'command' parameter to 'pushNotificationName' for clarity
- Update PushNotificationInfo.Command field to Name field
- Add comprehensive test for protected handler functionality
- Update all existing tests to use new protected parameter (false by default)
- Improve error messages to use 'push notification' terminology

Benefits:
- Critical handlers can be protected from accidental unregistration
- Clearer naming reflects that these are notification names, not commands
- Better error handling with informative error messages
- Backward compatible (existing handlers work with protected=false)
This commit is contained in:
Nedyalko Dyakov
2025-06-27 00:47:35 +03:00
parent 79f6df26c3
commit c33b157015
4 changed files with 154 additions and 109 deletions

View File

@ -824,11 +824,12 @@ func (c *Client) initializePushProcessor() {
}
}
// RegisterPushNotificationHandler registers a handler for a specific push notification command.
// Returns an error if a handler is already registered for this command.
func (c *Client) RegisterPushNotificationHandler(command string, handler PushNotificationHandler) error {
// RegisterPushNotificationHandler registers a handler for a specific push notification name.
// Returns an error if a handler is already registered for this push notification name.
// If protected is true, the handler cannot be unregistered.
func (c *Client) RegisterPushNotificationHandler(pushNotificationName string, handler PushNotificationHandler, protected bool) error {
if c.pushProcessor != nil {
return c.pushProcessor.RegisterHandler(command, handler)
return c.pushProcessor.RegisterHandler(pushNotificationName, handler, protected)
}
return nil
}
@ -996,11 +997,12 @@ func (c *Conn) Process(ctx context.Context, cmd Cmder) error {
return err
}
// RegisterPushNotificationHandler registers a handler for a specific push notification command.
// Returns an error if a handler is already registered for this command.
func (c *Conn) RegisterPushNotificationHandler(command string, handler PushNotificationHandler) error {
// RegisterPushNotificationHandler registers a handler for a specific push notification name.
// Returns an error if a handler is already registered for this push notification name.
// If protected is true, the handler cannot be unregistered.
func (c *Conn) RegisterPushNotificationHandler(pushNotificationName string, handler PushNotificationHandler, protected bool) error {
if c.pushProcessor != nil {
return c.pushProcessor.RegisterHandler(command, handler)
return c.pushProcessor.RegisterHandler(pushNotificationName, handler, protected)
}
return nil
}