|
package message |
|
|
|
import ( |
|
"time" |
|
|
|
"github.com/alist-org/alist/v3/server/common" |
|
"github.com/gin-gonic/gin" |
|
"github.com/pkg/errors" |
|
) |
|
|
|
type Http struct { |
|
Received chan string |
|
ToSend chan Message |
|
} |
|
|
|
type Req struct { |
|
Message string `json:"message" form:"message"` |
|
} |
|
|
|
func (p *Http) GetHandle(c *gin.Context) { |
|
select { |
|
case message := <-p.ToSend: |
|
common.SuccessResp(c, message) |
|
default: |
|
common.ErrorStrResp(c, "no message", 404) |
|
} |
|
} |
|
|
|
func (p *Http) SendHandle(c *gin.Context) { |
|
var req Req |
|
if err := c.ShouldBind(&req); err != nil { |
|
common.ErrorResp(c, err, 400) |
|
return |
|
} |
|
select { |
|
case p.Received <- req.Message: |
|
common.SuccessResp(c) |
|
default: |
|
common.ErrorStrResp(c, "nowhere needed", 500) |
|
} |
|
} |
|
|
|
func (p *Http) Send(message Message) error { |
|
select { |
|
case p.ToSend <- message: |
|
return nil |
|
default: |
|
return errors.New("send failed") |
|
} |
|
} |
|
|
|
func (p *Http) Receive() (string, error) { |
|
select { |
|
case message := <-p.Received: |
|
return message, nil |
|
default: |
|
return "", errors.New("receive failed") |
|
} |
|
} |
|
|
|
func (p *Http) WaitSend(message Message, d int) error { |
|
select { |
|
case p.ToSend <- message: |
|
return nil |
|
case <-time.After(time.Duration(d) * time.Second): |
|
return errors.New("send timeout") |
|
} |
|
} |
|
|
|
func (p *Http) WaitReceive(d int) (string, error) { |
|
select { |
|
case message := <-p.Received: |
|
return message, nil |
|
case <-time.After(time.Duration(d) * time.Second): |
|
return "", errors.New("receive timeout") |
|
} |
|
} |
|
|
|
var HttpInstance = &Http{ |
|
Received: make(chan string), |
|
ToSend: make(chan Message), |
|
} |
|
|