|
|
- package channel
-
- import (
- "errors"
- "sync"
- )
-
- type TaskChannel struct {
- name string
- c chan interface{}
- closed bool
- mutex sync.Mutex
- }
-
- func NewTaskChannel(name string) *TaskChannel {
- return &TaskChannel{
- c: make(chan interface{}, 100),
- name: name,
- }
- }
-
- // IsClosed 判断channel是否关闭
- func (c *TaskChannel) IsClosed() bool {
- c.mutex.Lock()
- defer c.mutex.Unlock()
- return c.closed
- }
-
- // SendData 发送数据
- func (c *TaskChannel) SendData(data interface{}) error {
- c.mutex.Lock()
- defer c.mutex.Unlock()
- if c.closed {
- return errors.New("管道已关闭")
- }
- c.c <- data
- return nil
- }
-
- func (c *TaskChannel) Close() {
- c.mutex.Lock()
- defer c.mutex.Unlock()
- if c.closed {
- return
- }
- close(c.c)
- c.closed = true
- }
-
- func (c *TaskChannel) Read() (data interface{}, ok bool, err error) {
- c.mutex.Lock()
- if c.closed {
- err = errors.New("管道已关闭")
- return
- }
- c.mutex.Unlock()
- data, ok = <- c.c
- return
- }
-
- func (c *TaskChannel) ResetChannel() (err error) {
- c.mutex.Lock()
- defer c.mutex.Unlock()
- if !c.closed {
- err = errors.New("管道未关闭")
- return
- }
- c.closed = false
- c.c = make(chan interface{}, 50)
- return
- }
|