queue_callback.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package queue
  2. import (
  3. "sparrow/pkg/protocol"
  4. "sync/atomic"
  5. )
  6. type Callback interface {
  7. OnSuccess()
  8. OnFailure(err error)
  9. }
  10. type MsgCallbackWrapper struct {
  11. msgCallback protocol.IMessageCallBack
  12. }
  13. func NewMsgCallbackWrapper(cb protocol.IMessageCallBack) *MsgCallbackWrapper {
  14. return &MsgCallbackWrapper{msgCallback: cb}
  15. }
  16. func (m *MsgCallbackWrapper) OnSuccess() {
  17. m.OnSuccess()
  18. }
  19. func (m *MsgCallbackWrapper) OnFailure(err error) {
  20. m.msgCallback.OnFailure(err)
  21. }
  22. type MultipleMsgCallbackWrapper struct {
  23. callbackCount int32
  24. msgCallBack protocol.IMessageCallBack
  25. }
  26. func NewMultipleMsgCallbackWrapper(count int32, callback protocol.IMessageCallBack) *MultipleMsgCallbackWrapper {
  27. return &MultipleMsgCallbackWrapper{
  28. callbackCount: count,
  29. msgCallBack: callback,
  30. }
  31. }
  32. func (m *MultipleMsgCallbackWrapper) OnSuccess() {
  33. v := atomic.AddInt32(&m.callbackCount, -1)
  34. if v <= 0 {
  35. m.msgCallBack.OnSuccess()
  36. }
  37. }
  38. func (m *MultipleMsgCallbackWrapper) OnFailure(err error) {
  39. m.msgCallBack.OnFailure(err)
  40. }