1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-06 12:03:50 +08:00

fix(server): always send response.

This commit is contained in:
wdvxdr 2021-07-25 13:28:25 +08:00
parent 19b2a86c7c
commit 89eaf91371
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6

View File

@ -1,7 +1,6 @@
package server package server
import ( import (
"bytes"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
@ -36,7 +35,6 @@ type lambdaResponse struct {
type lambdaResponseWriter struct { type lambdaResponseWriter struct {
statusCode int statusCode int
header http.Header header http.Header
buf *bytes.Buffer
} }
func (l *lambdaResponseWriter) Header() http.Header { func (l *lambdaResponseWriter) Header() http.Header {
@ -47,7 +45,7 @@ func (l *lambdaResponseWriter) Write(data []byte) (int, error) {
buffer := global.NewBuffer() buffer := global.NewBuffer()
defer global.PutBuffer(buffer) defer global.PutBuffer(buffer)
body := "" body := ""
if l.buf != nil { if data != nil {
body = utils.B2S(data) body = utils.B2S(data)
} }
header := make(map[string]string) header := make(map[string]string)
@ -116,18 +114,18 @@ func RunLambdaClient(bot *coolq.CQBot, conf *config.LambdaServer) {
for { for {
req := cli.next() req := cli.next()
if req == nil {
writer := lambdaResponseWriter{statusCode: 200}
writer.Write(nil)
continue
}
func() { func() {
defer func() { defer func() {
if e := recover(); e != nil { if e := recover(); e != nil {
log.Warnf("Lambda 出现不可恢复错误: %v\n%s", e, debug.Stack()) log.Warnf("Lambda 出现不可恢复错误: %v\n%s", e, debug.Stack())
} }
}() }()
buffer := global.NewBuffer() server.ServeHTTP(&lambdaResponseWriter{header: make(http.Header)}, req)
defer global.PutBuffer(buffer)
server.ServeHTTP(&lambdaResponseWriter{
header: make(http.Header),
buf: buffer,
}, req)
}() }()
} }
} }
@ -159,6 +157,9 @@ func (c *lambdaClient) next() *http.Request {
var req = new(http.Request) var req = new(http.Request)
var invoke = new(lambdaInvoke) var invoke = new(lambdaInvoke)
_ = json.NewDecoder(resp.Body).Decode(invoke) _ = json.NewDecoder(resp.Body).Decode(invoke)
if invoke.HTTPMethod == "" { // 不是 api 网关
return nil
}
req.Method = invoke.HTTPMethod req.Method = invoke.HTTPMethod
req.Body = io.NopCloser(strings.NewReader(invoke.Body)) req.Body = io.NopCloser(strings.NewReader(invoke.Body))