| package message |
|
|
| import ( |
| "time" |
|
|
| "github.com/OpenListTeam/OpenList/v4/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), |
| } |
|
|