From 51b43e47cf1cb4d3a281741545c3dcce86918fff Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 10 Aug 2023 17:56:04 +0800 Subject: [PATCH] 1 --- server/imserver/WSPListener.go | 34 +++++++++++++++++++++++++++++-- server/imserver/app.go | 19 ++++++++++++++++- server/imserver/cs/cs.generate.go | 5 +++++ server/imserver/go.mod | 8 ++++++-- third_party/f5 | 2 +- 5 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 server/imserver/cs/cs.generate.go diff --git a/server/imserver/WSPListener.go b/server/imserver/WSPListener.go index a1e4232d..e084aca1 100644 --- a/server/imserver/WSPListener.go +++ b/server/imserver/WSPListener.go @@ -3,20 +3,36 @@ package main import ( "net" "fmt" + + "q5" + "f5" + "cs" ) +type MsgHdr struct { + conn net.Conn + msgId int + seqId int + data []byte + msg interface{} + entry q5.ListHead +} + type WSPListener_ struct { listener net.Listener + ch <-chan *MsgHdr } var WSPListener = new (WSPListener_) func (this *WSPListener_) Init() { + this.ch = make(chan *MsgHdr) listener, err := net.Listen("tcp", "0.0.0.0:8888") if err != nil { } else { this.listener = listener + go this.parseNetPkt() go this.accept() } } @@ -54,19 +70,33 @@ func (this *WSPListener_) socketRead(conn net.Conn) { if err == nil && bufLen > 0 { warning := false for bufLen - offset >= 12 { + packLen := int(buf[0]) >> 16 + int(buf[1]) if buf[8] == 'K' && buf[9] == 'S' { - packLen := int(buf[0]) >> 16 + int(buf[1]) if bufLen - offset < 12 + packLen { continue } + hdr := new(MsgHdr) + hdr.msgId = int(buf[0]) >> 16 + int(buf[1]) + hdr.seqId = int(buf[0]) >> 16 + int(buf[1]) offset += 12 + packLen } else { warning = true - offset += 1 + offset++ continue } } if warning { + f5.SysLog().Warning("收到client非法数据包") + } + } + } +} + +func (this *WSPListener_) parseNetPkt() { + for { + if hdr, ok := <-this.ch; ok { + hdr.msg = cs.ParsePb(hdr.msgId, hdr.data) + if hdr.msg != nil { } } diff --git a/server/imserver/app.go b/server/imserver/app.go index f5f26333..a5d97141 100644 --- a/server/imserver/app.go +++ b/server/imserver/app.go @@ -3,6 +3,7 @@ package main import ( "time" "fmt" + "sync" "q5" "f5" @@ -10,6 +11,8 @@ import ( type App_ struct { f5.App_ + msgMutex sync.Mutex + msgList q5.ListHead } var App = new (App_) @@ -17,7 +20,8 @@ var App = new (App_) func (this *App_) Init() { f5.App = &this.App_ f5.App.SetPkgName("imserver") - this.App_.Init() + this.App_.Init(this.Update) + this.msgList.Init(nil) WSPListener.Init() go this.goReportServerState(); } @@ -27,6 +31,9 @@ func (this *App_) UnInit() { this.App_.UnInit() } +func (this *App_) Update() { +} + func (this *App_) goReportServerState() { for { params := q5.NewMxoObject() @@ -46,3 +53,13 @@ func (this *App_) goReportServerState() { time.Sleep(time.Duration(1) * time.Second) } } + + +func (this *App_) addNetMsg(hdr *MsgHdr) { + { + this.msgMutex.Lock() + defer this.msgMutex.Unlock() + this.msgList.AddTail(&hdr.entry); + } + this.NotifyLoopCond() +} diff --git a/server/imserver/cs/cs.generate.go b/server/imserver/cs/cs.generate.go new file mode 100644 index 00000000..d5c20244 --- /dev/null +++ b/server/imserver/cs/cs.generate.go @@ -0,0 +1,5 @@ +package cs + +func ParsePb(msgId int, data []byte) interface{} { + return nil +} diff --git a/server/imserver/go.mod b/server/imserver/go.mod index 3fce90d4..a1472ebe 100644 --- a/server/imserver/go.mod +++ b/server/imserver/go.mod @@ -2,12 +2,14 @@ module imserver go 1.20 -require q5 v1.0.0 // indirect +require q5 v1.0.0 require f5 v1.0.0 require mtb v1.0.0 +require cs v1.0.0 + require ( github.com/go-sql-driver/mysql v1.5.0 // indirect github.com/golang/protobuf v1.4.2 // indirect @@ -19,4 +21,6 @@ replace q5 => ../../third_party/q5 replace f5 => ../../third_party/f5 -replace mtb => ./mtb \ No newline at end of file +replace mtb => ./mtb + +replace cs => ./cs diff --git a/third_party/f5 b/third_party/f5 index efc8db84..6aa5ba15 160000 --- a/third_party/f5 +++ b/third_party/f5 @@ -1 +1 @@ -Subproject commit efc8db84bc297223ef9e124fffb76ecc1d33899f +Subproject commit 6aa5ba1546beb17e9dc6055fe672dce1d4164686