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

fix: remove unused fields and ensure push notifications work in cloned clients

- Remove unused Timestamp and Source fields from PushNotificationInfo
- Add pushProcessor to newConn function to ensure Conn instances have push notifications
- Add push notification methods to Conn type for consistency
- Ensure cloned clients and Conn instances preserve push notification functionality

This fixes issues where:
1. PushNotificationInfo had unused fields causing confusion
2. Conn instances created via client.Conn() lacked push notification support
3. All client types now consistently support push notifications
This commit is contained in:
Nedyalko Dyakov
2025-06-26 21:30:27 +03:00
parent d7fbe18214
commit 1331fb9957
2 changed files with 30 additions and 4 deletions

View File

@ -225,10 +225,8 @@ const (
// PushNotificationInfo contains metadata about a push notification. // PushNotificationInfo contains metadata about a push notification.
type PushNotificationInfo struct { type PushNotificationInfo struct {
Command string Command string
Args []interface{} Args []interface{}
Timestamp int64
Source string
} }
// ParsePushNotificationInfo extracts information from a push notification. // ParsePushNotificationInfo extracts information from a push notification.

View File

@ -982,6 +982,11 @@ func newConn(opt *Options, connPool pool.Pooler, parentHooks *hooksMixin) *Conn
c.hooksMixin = parentHooks.clone() c.hooksMixin = parentHooks.clone()
} }
// Set push notification processor if available in options
if opt.PushNotificationProcessor != nil {
c.pushProcessor = opt.PushNotificationProcessor
}
c.cmdable = c.Process c.cmdable = c.Process
c.statefulCmdable = c.Process c.statefulCmdable = c.Process
c.initHooks(hooks{ c.initHooks(hooks{
@ -1000,6 +1005,29 @@ func (c *Conn) Process(ctx context.Context, cmd Cmder) error {
return err 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 {
if c.pushProcessor != nil {
return c.pushProcessor.RegisterHandler(command, handler)
}
return nil
}
// RegisterPushNotificationHandlerFunc registers a function as a handler for a specific push notification command.
// Returns an error if a handler is already registered for this command.
func (c *Conn) RegisterPushNotificationHandlerFunc(command string, handlerFunc func(ctx context.Context, notification []interface{}) bool) error {
if c.pushProcessor != nil {
return c.pushProcessor.RegisterHandlerFunc(command, handlerFunc)
}
return nil
}
// GetPushNotificationProcessor returns the push notification processor.
func (c *Conn) GetPushNotificationProcessor() *PushNotificationProcessor {
return c.pushProcessor
}
func (c *Conn) Pipelined(ctx context.Context, fn func(Pipeliner) error) ([]Cmder, error) { func (c *Conn) Pipelined(ctx context.Context, fn func(Pipeliner) error) ([]Cmder, error) {
return c.Pipeline().Pipelined(ctx, fn) return c.Pipeline().Pipelined(ctx, fn)
} }