Spaces:
Running
Running
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 // received messages from web | |
ToSend chan Message // messages to send to web | |
} | |
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), | |
} | |