diff --git a/modules/base/go.mod b/modules/base/go.mod index d47be79c2..7763b18b5 100644 --- a/modules/base/go.mod +++ b/modules/base/go.mod @@ -7,6 +7,13 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 ) +require ( + github.com/dolthub/maphash v0.1.0 // indirect + github.com/klauspost/compress v1.17.9 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect +) + require ( github.com/BurntSushi/toml v1.3.2 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect @@ -20,6 +27,7 @@ require ( github.com/jinzhu/now v1.1.5 // indirect github.com/kr/pretty v0.1.0 // indirect github.com/kr/text v0.2.0 // indirect + github.com/lxzan/gws v1.8.9 github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -27,6 +35,7 @@ require ( github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.6.1 // indirect + github.com/tidwall/gjson v1.18.0 go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/sdk v1.24.0 // indirect diff --git a/modules/base/go.sum b/modules/base/go.sum index d20308e87..da3206168 100644 --- a/modules/base/go.sum +++ b/modules/base/go.sum @@ -6,6 +6,8 @@ github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyM github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/dolthub/maphash v0.1.0 h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ= +github.com/dolthub/maphash v0.1.0/go.mod h1:gkg4Ch4CdCDu5h6PMriVLawB7koZ+5ijb9puGMV50a4= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= @@ -28,6 +30,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= @@ -35,6 +39,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lxzan/gws v1.8.9 h1:VU3SGUeWlQrEwfUSfokcZep8mdg/BrUF+y73YYshdBM= +github.com/lxzan/gws v1.8.9/go.mod h1:d9yHaR1eDTBHagQC6KY7ycUOaz5KWeqQtP3xu7aMK8Y= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -54,6 +60,12 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= diff --git a/modules/base/middleware/middleware.go b/modules/base/middleware/middleware.go index f0f82bda0..a97896e7b 100644 --- a/modules/base/middleware/middleware.go +++ b/modules/base/middleware/middleware.go @@ -2,10 +2,12 @@ package middleware import ( "blazing/modules/base/config" + "fmt" "net/http" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" + "github.com/lxzan/gws" ) func MiddlewareCORS(r *ghttp.Request) { @@ -39,5 +41,41 @@ func init() { if config.Config.Middleware.Log.Enable { g.Server().BindMiddleware("/admin/*", BaseLog) } + g.Server().BindHandler("/ws", func(r *ghttp.Request) { + upgrader := gws.NewUpgrader(new(Handler), &gws.ServerOption{ + //CompressEnabled: true, + + // 在querystring里面传入用户名 + // 把Sec-WebSocket-Key作为连接的key + + // 刷新页面的时候, 会触发上一个连接的OnClose/OnError事件, 这时候需要对比key并删除map里存储的连接 + Authorize: func(rt *http.Request, session gws.SessionStorage) bool { + //r.s\\\ + // r.Get("t") + //admin := cool.GetAdmin(r.Context()) + // var name = r.URL.Query().Get("name") + // if name == "" { + // return false + // } + // t, _ := service.NewBaseSysUserService().Person(admin.UserID) + + //g.Log().Debug(context.TODO(), t.Mimi) + // session.Store("name", t.Mimi) + //session.Store("key", r.Header.Get("Sec-WebSocket-Key")) + return true + }, + }) + + socket, err := upgrader.Upgrade(r.Response.Writer, r.Request) + if err != nil { + fmt.Println(err) + return + } + // ants.Submit(func() { + // socket.ReadLoop() + // }) + go socket.ReadLoop() + + }) } diff --git a/modules/base/middleware/websocket.go b/modules/base/middleware/websocket.go new file mode 100644 index 000000000..dde53a44c --- /dev/null +++ b/modules/base/middleware/websocket.go @@ -0,0 +1,71 @@ +package middleware + +import ( + "fmt" + "time" + + "github.com/lxzan/gws" +) + +const PingInterval = 10 * time.Second + +type Handler struct { + gws.BuiltinEventHandler +} + +func (c *Handler) OnOpen(socket *gws.Conn) { + +} + +func (c *Handler) OnPing(socket *gws.Conn, payload []byte) { + _ = socket.SetDeadline(time.Now().Add(2 * PingInterval)) + _ = socket.WritePong(nil) +} + +func (c *Handler) OnPong(socket *gws.Conn, payload []byte) {} + +func (c *Handler) OnMessage(socket *gws.Conn, gwsmessage *gws.Message) { + fmt.Println(gwsmessage.Bytes()) + +} + +// RemoveSocket 移除WebSocket连接 + +func messeunpack(id int64, x []byte) { + + // json := gjson.ParseBytes(x) + // json.ForEach(func(key, value gjson.Result) bool { + // fmt.Println(key, value) + // numeric := regexp.MustCompile(`\d`).MatchString(value.String()) + + // var ob int + // if numeric { //如果正确 则使用常量 + + // } else { //如果错误,则使用变量,即从数据库查询常量定义值是多少 + + // } + + // work.User_script(uint(id), strings.Trim(message.Data.String(), " ")) + // // switch s:=value.String() { + // // case regexp.MustCompile(`\d`).MatchString(s): + + // // } + + // return true + // }) + // json.Get("1").String() + // var ob int + // numeric := regexp.MustCompile(`\d`).MatchString(json.Get("1").String()) + // if numeric { //如果正确 则使用常量 + // ob, _ = strconv.Atoi(json.Get("1").String()) + // } else { //如果错误,则使用变量,即从数据库查询常量定义值是多少 + // ob, _ = strconv.Atoi(json.Get("1").String()) + // } + // switch ob { + // case 1: //发包函数 + // work.User_script(uint(id), strings.Trim(message.Data.String(), " ")) + // } + + // Go 1.9.7 onwards only. + +}