package bytesSendUtil

import (
	"fmt"
)

/*
实现sender接口
*/

type baseSender struct {
	// 待发送的数据channel
	waitingDataChan chan dataItem

	// 失败数据缓存
	cachedDataChan chan dataItem

	// 用于停止协程
	done chan struct{}
}

func newBaseSender() *baseSender {
	return &baseSender{
		waitingDataChan: make(chan dataItem, 1024),
		cachedDataChan:  make(chan dataItem, 1024000),
		done:            make(chan struct{}),
	}
}

// Sender接口
// Send:
func (this *baseSender) Send() error {
	// baseSender不实现发送
	// 由tcpSender和httpSender实现发送
	return fmt.Errorf("baseSender dose not have Send Method")
}

// Sender接口
// Data: 返回待发送的数据channel
func (this *baseSender) Data() <-chan dataItem {
	return this.waitingDataChan
}

// Sender接口
// Cache：返回失败数据缓存channel
func (this *baseSender) Cache() chan dataItem {
	return this.cachedDataChan
}

// Sender接口
// Done：返回channel用于判断是否关闭
func (this *baseSender) Done() <-chan struct{} {
	return this.done
}
