增加基础的连接管理与command调度
This commit is contained in:
parent
87f0a26e5e
commit
d21d9c1395
@ -26,5 +26,5 @@ type ICommand interface {
|
||||
// Author : go_developer@163.com<张德满>
|
||||
//
|
||||
// Date : 7:21 下午 2021/3/27
|
||||
Execute(ctx *context.WSContext) error
|
||||
Execute(ctx *context.WSContext, data []byte) error
|
||||
}
|
||||
|
16
construct.go
16
construct.go
@ -8,10 +8,11 @@
|
||||
package websocket
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
|
||||
"github.com/go-developer/websocket/storage"
|
||||
|
||||
"github.com/go-developer/websocket/context"
|
||||
@ -148,20 +149,15 @@ func NewWebsocketServe(wsInstanceList ...abstract.IWebsocket) error {
|
||||
//
|
||||
// Date : 3:36 下午 2021/3/28
|
||||
func dispatchCommand(ctx *context.WSContext, data []byte) error {
|
||||
var command struct {
|
||||
Command string `json:"command"`
|
||||
}
|
||||
if err := json.Unmarshal(data, &command); nil != err {
|
||||
return err
|
||||
}
|
||||
if _, exist := commandTable[ctx.Flag]; !exist {
|
||||
return errors.WithStack(errors.New("未注册【" + ctx.Flag + "】长连接模块"))
|
||||
}
|
||||
|
||||
if _, exist := commandTable[ctx.Flag][command.Command]; !exist {
|
||||
return errors.WithStack(errors.New("【" + ctx.Flag + "】长连接模块未注册【" + command.Command + "】指令"))
|
||||
cmd := gjson.Get(string(data), "command").String()
|
||||
if _, exist := commandTable[ctx.Flag][cmd]; !exist {
|
||||
return errors.WithStack(errors.New("【" + ctx.Flag + "】长连接模块未注册【" + cmd + "】指令"))
|
||||
}
|
||||
return nil
|
||||
return commandTable[ctx.Flag][cmd].Execute(ctx, data)
|
||||
}
|
||||
|
||||
func run() {
|
||||
|
@ -46,7 +46,7 @@ func (e Example) HandshakeURL() []string {
|
||||
}
|
||||
|
||||
func (e Example) GetCommandList() []abstract.ICommand {
|
||||
return nil
|
||||
return []abstract.ICommand{&exampleCommand{}}
|
||||
}
|
||||
|
||||
func (e Example) GetModuleFlag() string {
|
||||
@ -56,3 +56,15 @@ func (e Example) GetModuleFlag() string {
|
||||
func (e Example) GetServerPort() int {
|
||||
return 10099
|
||||
}
|
||||
|
||||
type exampleCommand struct {
|
||||
}
|
||||
|
||||
func (e exampleCommand) GetCommand() string {
|
||||
return "ping"
|
||||
}
|
||||
|
||||
func (e exampleCommand) Execute(ctx *context.WSContext, data []byte) error {
|
||||
message.Response(ctx, map[string]interface{}{"ping": "pong"})
|
||||
return nil
|
||||
}
|
||||
|
3
go.mod
3
go.mod
@ -4,7 +4,7 @@ go 1.16
|
||||
|
||||
require (
|
||||
github.com/gin-gonic/gin v1.6.3
|
||||
github.com/go-developer/gopkg v0.0.0-20210401121730-91894a6f9659
|
||||
github.com/go-developer/gopkg v0.0.0-20210409075258-6a35eb1a9d4c
|
||||
github.com/go-playground/validator/v10 v10.4.1 // indirect
|
||||
github.com/golang/protobuf v1.5.1 // indirect
|
||||
github.com/gorilla/websocket v1.4.2 // indirect
|
||||
@ -13,6 +13,7 @@ require (
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.1 // indirect
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/tidwall/gjson v1.7.4 // indirect
|
||||
github.com/ugorji/go v1.2.4 // indirect
|
||||
gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
|
4
go.sum
4
go.sum
@ -20,6 +20,8 @@ github.com/go-developer/gopkg v0.0.0-20210326100134-08a8a8015cc5 h1:Id0MV9wihSMC
|
||||
github.com/go-developer/gopkg v0.0.0-20210326100134-08a8a8015cc5/go.mod h1:DZcG3JkuXhqmHwZMrSJefYWNPns7nYBhA9q4ocmpG5o=
|
||||
github.com/go-developer/gopkg v0.0.0-20210401121730-91894a6f9659 h1:wHI+HmfpLeG9B6EL47jLxNl4zB5dSW3ihtlWxvRrDzk=
|
||||
github.com/go-developer/gopkg v0.0.0-20210401121730-91894a6f9659/go.mod h1:DZcG3JkuXhqmHwZMrSJefYWNPns7nYBhA9q4ocmpG5o=
|
||||
github.com/go-developer/gopkg v0.0.0-20210409075258-6a35eb1a9d4c h1:WotMdy0sk6f9+kMxzqBbdzlZtok7ieiTHnn1eVeqTTE=
|
||||
github.com/go-developer/gopkg v0.0.0-20210409075258-6a35eb1a9d4c/go.mod h1:DZcG3JkuXhqmHwZMrSJefYWNPns7nYBhA9q4ocmpG5o=
|
||||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||
@ -120,6 +122,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tidwall/gjson v1.6.8 h1:CTmXMClGYPAmln7652e69B7OLXfTi5ABcPPwjIWUv7w=
|
||||
github.com/tidwall/gjson v1.6.8/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI=
|
||||
github.com/tidwall/gjson v1.7.4 h1:19cchw8FOxkG5mdLRkGf9jqIqEyqdZhPqW60XfyFxk8=
|
||||
github.com/tidwall/gjson v1.7.4/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk=
|
||||
github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE=
|
||||
github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||
|
@ -18,27 +18,46 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
Connection = &connection{table: make([]easymap.EasyMap, 0)}
|
||||
for i := 0; i < 4096; i++ {
|
||||
}
|
||||
c := &connection{}
|
||||
c.table, _ = easymap.NewSegment(4096, true)
|
||||
Connection = c
|
||||
}
|
||||
|
||||
type connection struct {
|
||||
table []easymap.EasyMap
|
||||
table easymap.EasyMap
|
||||
}
|
||||
|
||||
func (c *connection) Store(ctx *context.WSContext) {
|
||||
panic("implement me")
|
||||
c.table.Set(ctx.ConnectionID, ctx)
|
||||
}
|
||||
|
||||
func (c *connection) Del(ctx *context.WSContext) {
|
||||
panic("implement me")
|
||||
c.table.Del(ctx.ConnectionID)
|
||||
}
|
||||
|
||||
func (c *connection) GetCtxList(cidList ...string) []*context.WSContext {
|
||||
panic("implement me")
|
||||
cidTable := make(map[string]bool)
|
||||
for _, item := range cidList {
|
||||
cidTable[item] = true
|
||||
}
|
||||
list := c.table.GetAll()
|
||||
result := make([]*context.WSContext, 0)
|
||||
for _, c := range list {
|
||||
if r, ok := c.(*context.WSContext); ok {
|
||||
if len(cidTable) == 0 {
|
||||
result = append(result, r)
|
||||
continue
|
||||
}
|
||||
if _, exist := cidTable[r.ConnectionID]; exist {
|
||||
result = append(result, r)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (c *connection) Clear(message string) {
|
||||
panic("implement me")
|
||||
// TODO : 清空连接表
|
||||
// connectionList := c.GetCtxList()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user