Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/internal/message/http.go
1560 views
1
package message
2
3
import (
4
"time"
5
6
"github.com/alist-org/alist/v3/server/common"
7
"github.com/gin-gonic/gin"
8
"github.com/pkg/errors"
9
)
10
11
type Http struct {
12
Received chan string // received messages from web
13
ToSend chan Message // messages to send to web
14
}
15
16
type Req struct {
17
Message string `json:"message" form:"message"`
18
}
19
20
func (p *Http) GetHandle(c *gin.Context) {
21
select {
22
case message := <-p.ToSend:
23
common.SuccessResp(c, message)
24
default:
25
common.ErrorStrResp(c, "no message", 404)
26
}
27
}
28
29
func (p *Http) SendHandle(c *gin.Context) {
30
var req Req
31
if err := c.ShouldBind(&req); err != nil {
32
common.ErrorResp(c, err, 400)
33
return
34
}
35
select {
36
case p.Received <- req.Message:
37
common.SuccessResp(c)
38
default:
39
common.ErrorStrResp(c, "nowhere needed", 500)
40
}
41
}
42
43
func (p *Http) Send(message Message) error {
44
select {
45
case p.ToSend <- message:
46
return nil
47
default:
48
return errors.New("send failed")
49
}
50
}
51
52
func (p *Http) Receive() (string, error) {
53
select {
54
case message := <-p.Received:
55
return message, nil
56
default:
57
return "", errors.New("receive failed")
58
}
59
}
60
61
func (p *Http) WaitSend(message Message, d int) error {
62
select {
63
case p.ToSend <- message:
64
return nil
65
case <-time.After(time.Duration(d) * time.Second):
66
return errors.New("send timeout")
67
}
68
}
69
70
func (p *Http) WaitReceive(d int) (string, error) {
71
select {
72
case message := <-p.Received:
73
return message, nil
74
case <-time.After(time.Duration(d) * time.Second):
75
return "", errors.New("receive timeout")
76
}
77
}
78
79
var HttpInstance = &Http{
80
Received: make(chan string),
81
ToSend: make(chan Message),
82
}
83
84