This commit is contained in:
cdle
2023-06-29 13:49:23 +08:00
parent b6e4c180c3
commit 7ea4710d16
10 changed files with 97 additions and 70 deletions
+58 -44
View File
@@ -21,57 +21,71 @@ func IsWebSocketRequest(req *http.Request) bool {
func handleWebsocket(c *gin.Context) {
for _, function := range Functions {
if function.Http != nil {
path := function.Http.Path
method := function.Http.Method
if c.Request.URL.Path == path && strings.HasPrefix(method, "W") {
// connect
var req = &Request{
c: c,
// uuid: uuid,
}
var res = &Response{
c: c,
}
req._event = "connect"
function.Handle(&Faker{
Type: "*",
}, func(vm *goja.Runtime) {
vm.Set("res", res)
vm.Set("req", req)
})
// message
var upGrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
c.Writer.Write([]byte(err.Error()))
return
}
for {
_, data, err := ws.ReadMessage()
if err != nil { // disconnect
req._event = "disconnect"
function.Handle(&Faker{
Type: "*",
}, func(vm *goja.Runtime) {
vm.Set("res", res)
vm.Set("req", req)
})
ws.Close()
break
if len(function.Https) != 0 {
for _, h := range function.Https {
path := h.Path
method := h.Method
if c.Request.URL.Path == path && strings.HasPrefix(method, "W") {
// connect
var req = &Request{
c: c,
// uuid: uuid,
}
req.bodyData = data
req._event = "message"
var res = &Response{
c: c,
}
req._event = "connect"
function.Handle(&Faker{
Type: "*",
}, func(vm *goja.Runtime) {
vm.Set("res", res)
vm.Set("req", req)
})
// message
var upGrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
c.Writer.Write([]byte(err.Error()))
return
}
res.conn = ws
for {
_, data, err := ws.ReadMessage()
if err != nil { // disconnect
req._event = "disconnect"
for _, f2 := range Functions {
if f2.UUID == function.UUID {
function = f2
}
}
function.Handle(&Faker{
Type: "*",
}, func(vm *goja.Runtime) {
vm.Set("res", res)
vm.Set("req", req)
})
ws.Close()
break
}
req.bodyData = data
req._event = "message"
for _, f2 := range Functions {
if f2.UUID == function.UUID {
function = f2
}
}
function.Handle(&Faker{
Type: "*",
}, func(vm *goja.Runtime) {
vm.Set("res", res)
vm.Set("req", req)
})
}
return
}
}
}