@@ -56,6 +56,24 @@ func NewProsumer(client *core.Client, id ...string) *Prosumer {
56
56
return p
57
57
}
58
58
59
+ func (p * Prosumer ) onError (err error ) {
60
+ if p .OnError != nil {
61
+ p .OnError (err )
62
+ }
63
+ }
64
+
65
+ func (p * Prosumer ) onSubscribe (topic string ) {
66
+ if p .OnSubscribe != nil {
67
+ p .OnSubscribe (topic )
68
+ }
69
+ }
70
+
71
+ func (p * Prosumer ) onUnsubscribe (topic string ) {
72
+ if p .OnUnsubscribe != nil {
73
+ p .OnUnsubscribe (topic )
74
+ }
75
+ }
76
+
59
77
func (p * Prosumer ) Client () * core.Client {
60
78
return p .client
61
79
}
@@ -99,14 +117,19 @@ func (p *Prosumer) call(callback Callback, message Message) {
99
117
default :
100
118
v := reflect .ValueOf (callback )
101
119
t := v .Type ()
102
- switch t .NumIn () {
103
- case 1 :
104
- if data , err := io .Convert (message .Data , t .In (0 )); err != nil {
105
- v .Call ([]reflect.Value {reflect .ValueOf (data )})
120
+ if n := t .NumIn (); n >= 1 {
121
+ data , err := io .Convert (message .Data , t .In (0 ))
122
+ if err != nil {
123
+ p .onError (err )
124
+ return
106
125
}
107
- case 2 :
108
- if data , err := io .Convert (message .Data , t .In (0 )); err != nil {
126
+ switch n {
127
+ case 1 :
128
+ v .Call ([]reflect.Value {reflect .ValueOf (data )})
129
+ case 2 :
109
130
v .Call ([]reflect.Value {reflect .ValueOf (data ), reflect .ValueOf (message .From )})
131
+ default :
132
+ panic ("invalid callback: " + t .String ())
110
133
}
111
134
}
112
135
}
@@ -120,9 +143,7 @@ func (p *Prosumer) message() {
120
143
if p .RetryInterval != 0 {
121
144
<- time .After (p .RetryInterval )
122
145
}
123
- if p .OnError != nil {
124
- p .OnError (err )
125
- }
146
+ p .onError (err )
126
147
}
127
148
continue
128
149
}
@@ -138,9 +159,7 @@ func (p *Prosumer) Subscribe(topic string, callback Callback) (result bool, err
138
159
p .callbacks .Store (topic , callback )
139
160
result , err = p .proxy .subscribe (topic )
140
161
go p .message ()
141
- if p .OnSubscribe != nil {
142
- p .OnSubscribe (topic )
143
- }
162
+ p .onSubscribe (topic )
144
163
}
145
164
return
146
165
}
@@ -149,9 +168,7 @@ func (p *Prosumer) Unsubscribe(topic string) (result bool, err error) {
149
168
if p .ID () != "" {
150
169
result , err = p .proxy .unsubscribe (topic )
151
170
p .callbacks .Delete (topic )
152
- if p .OnUnsubscribe != nil {
153
- p .OnUnsubscribe (topic )
154
- }
171
+ p .onUnsubscribe (topic )
155
172
}
156
173
return
157
174
}
0 commit comments