@@ -56,6 +56,24 @@ func NewProsumer(client *core.Client, id ...string) *Prosumer {
5656 return p
5757}
5858
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+
5977func (p * Prosumer ) Client () * core.Client {
6078 return p .client
6179}
@@ -99,14 +117,19 @@ func (p *Prosumer) call(callback Callback, message Message) {
99117 default :
100118 v := reflect .ValueOf (callback )
101119 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
106125 }
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 :
109130 v .Call ([]reflect.Value {reflect .ValueOf (data ), reflect .ValueOf (message .From )})
131+ default :
132+ panic ("invalid callback: " + t .String ())
110133 }
111134 }
112135 }
@@ -120,9 +143,7 @@ func (p *Prosumer) message() {
120143 if p .RetryInterval != 0 {
121144 <- time .After (p .RetryInterval )
122145 }
123- if p .OnError != nil {
124- p .OnError (err )
125- }
146+ p .onError (err )
126147 }
127148 continue
128149 }
@@ -138,9 +159,7 @@ func (p *Prosumer) Subscribe(topic string, callback Callback) (result bool, err
138159 p .callbacks .Store (topic , callback )
139160 result , err = p .proxy .subscribe (topic )
140161 go p .message ()
141- if p .OnSubscribe != nil {
142- p .OnSubscribe (topic )
143- }
162+ p .onSubscribe (topic )
144163 }
145164 return
146165}
@@ -149,9 +168,7 @@ func (p *Prosumer) Unsubscribe(topic string) (result bool, err error) {
149168 if p .ID () != "" {
150169 result , err = p .proxy .unsubscribe (topic )
151170 p .callbacks .Delete (topic )
152- if p .OnUnsubscribe != nil {
153- p .OnUnsubscribe (topic )
154- }
171+ p .onUnsubscribe (topic )
155172 }
156173 return
157174}
0 commit comments