mirror of
https://github.com/duanhf2012/origin.git
synced 2026-03-16 22:47:33 +08:00
修复解包bug
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
package logicservice
|
package logicservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/duanhf2012/origin/Test/msgpb"
|
"github.com/duanhf2012/origin/Test/msgpb"
|
||||||
"github.com/duanhf2012/origin/network"
|
"github.com/duanhf2012/origin/network"
|
||||||
"github.com/duanhf2012/origin/sysservice"
|
"github.com/duanhf2012/origin/sysservice"
|
||||||
@@ -51,6 +51,7 @@ func (ws *SubNet1_Service) OnRun() bool {
|
|||||||
|
|
||||||
|
|
||||||
func (ws *SubNet1_Service) MessageHandler(pClient *network.SClient,msgtype uint16,msg proto.Message){
|
func (ws *SubNet1_Service) MessageHandler(pClient *network.SClient,msgtype uint16,msg proto.Message){
|
||||||
|
fmt.Print(pClient.GetId(),"\n",msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *SubNet1_Service) ConnEventHandler (pClient *network.SClient){
|
func (ws *SubNet1_Service) ConnEventHandler (pClient *network.SClient){
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ type ITcpSocketServerReciver interface {
|
|||||||
OnConnected(pClient *SClient)
|
OnConnected(pClient *SClient)
|
||||||
OnDisconnect(pClient *SClient)
|
OnDisconnect(pClient *SClient)
|
||||||
OnRecvMsg(pClient *SClient, pPack *MsgBasePack)
|
OnRecvMsg(pClient *SClient, pPack *MsgBasePack)
|
||||||
|
VerifyPackType(packtype uint16) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -139,13 +140,23 @@ func (slf *SClient) listendata(){
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fillsize,bfillRet := pack.FillData(buff,buffDataSize)
|
fillsize,bfillRet,fillhead := pack.FillData(buff,buffDataSize)
|
||||||
|
//提交校验头
|
||||||
|
if fillhead == true {
|
||||||
|
if pack.packsize>slf.tcpserver.MaxRecvPackSize || slf.tcpserver.iReciver.VerifyPackType(pack.packtype) == false {
|
||||||
|
service.GetLogger().Printf(service.LEVER_WARN, "VerifyPackType error clent id %d is disconnect %d,%d",slf.id,pack.packtype, pack.packsize)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
if bfillRet == true {
|
if bfillRet == true {
|
||||||
slf.recvPack.Push(pack)
|
slf.recvPack.Push(pack)
|
||||||
pack = MsgBasePack{}
|
pack = MsgBasePack{}
|
||||||
}
|
}
|
||||||
buff = append(buff[fillsize:])
|
if fillsize>0 {
|
||||||
buffDataSize -= fillsize
|
buff = append(buff[fillsize:])
|
||||||
|
buffDataSize -= fillsize
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,28 +171,30 @@ func (slf *MsgBasePack) Bytes() []byte{
|
|||||||
return bRet
|
return bRet
|
||||||
}
|
}
|
||||||
|
|
||||||
//返回值:填充多少字节,是否完成
|
//返回值:填充多少字节,是否完成,是否填充头
|
||||||
func (slf *MsgBasePack) FillData(bdata []byte,datasize uint16) (uint16,bool) {
|
func (slf *MsgBasePack) FillData(bdata []byte,datasize uint16) (uint16,bool,bool) {
|
||||||
var fillsize uint16
|
var fillsize uint16
|
||||||
|
fillhead := false
|
||||||
//解包头
|
//解包头
|
||||||
if slf.packsize ==0 {
|
if slf.packsize ==0 {
|
||||||
if datasize < 4 {
|
if datasize < 4 {
|
||||||
return 0,false
|
return 0,false,fillhead
|
||||||
}
|
}
|
||||||
|
|
||||||
slf.packsize= binary.BigEndian.Uint16(bdata[:2])
|
slf.packsize= binary.BigEndian.Uint16(bdata[:2])
|
||||||
slf.packtype= binary.BigEndian.Uint16(bdata[2:4])
|
slf.packtype= binary.BigEndian.Uint16(bdata[2:4])
|
||||||
fillsize += 4
|
fillsize += 4
|
||||||
|
fillhead = true
|
||||||
}
|
}
|
||||||
|
|
||||||
//解包体
|
//解包体
|
||||||
if slf.packsize>0 && slf.packsize>=datasize {
|
if slf.packsize>0 && datasize+4>=slf.packsize {
|
||||||
slf.body = append(slf.body, bdata[fillsize:slf.packsize]...)
|
slf.body = append(slf.body, bdata[fillsize:slf.packsize]...)
|
||||||
fillsize += (datasize - fillsize)
|
fillsize += (slf.packsize - fillsize)
|
||||||
return fillsize,true
|
return fillsize,true,fillhead
|
||||||
}
|
}
|
||||||
|
|
||||||
return fillsize,false
|
return fillsize,false,fillhead
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *MsgBasePack) Clear() {
|
func (slf *MsgBasePack) Clear() {
|
||||||
@@ -226,3 +239,7 @@ func (slf *SClient) Close(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (slf *SClient) GetId() uint64{
|
||||||
|
return slf.id
|
||||||
|
}
|
||||||
|
|||||||
@@ -98,6 +98,12 @@ func (slf *TcpSocketPbService) OnDisconnect(pClient *network.SClient){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *TcpSocketPbService) VerifyPackType(packtype uint16) bool{
|
||||||
|
_,ok := slf.mapMsg[packtype]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func (slf *TcpSocketPbService) OnExceptMsg (pClient *network.SClient,pPack *network.MsgBasePack,err error){
|
func (slf *TcpSocketPbService) OnExceptMsg (pClient *network.SClient,pPack *network.MsgBasePack,err error){
|
||||||
if slf.exceptMsgHandler!=nil {
|
if slf.exceptMsgHandler!=nil {
|
||||||
slf.exceptMsgHandler(pClient,pPack,err)
|
slf.exceptMsgHandler(pClient,pPack,err)
|
||||||
|
|||||||
Reference in New Issue
Block a user