mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
新增tcp protobuf接口
This commit is contained in:
@@ -1,34 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/duanhf2012/origin/cluster"
|
||||
"github.com/duanhf2012/origin/originnode"
|
||||
"github.com/duanhf2012/origin/service"
|
||||
)
|
||||
|
||||
type SubNet1_Service struct {
|
||||
service.BaseService
|
||||
}
|
||||
|
||||
func init() {
|
||||
originnode.InitService(&SubNet1_Service{})
|
||||
}
|
||||
|
||||
//OnInit ...
|
||||
func (ws *SubNet1_Service) OnInit() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
//OnRun ...
|
||||
func (ws *SubNet1_Service) OnRun() bool {
|
||||
var in InputData
|
||||
var ret int
|
||||
in.A1 = 10
|
||||
in.A2 = 20
|
||||
err := cluster.Call("SubNet2_Service1.RPC_Multi", &in, &ret)
|
||||
fmt.Printf("%+v", err)
|
||||
return false
|
||||
}
|
||||
64
Test/logicservice/SubNet1_Service.go
Normal file
64
Test/logicservice/SubNet1_Service.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package logicservice
|
||||
|
||||
import (
|
||||
|
||||
"github.com/duanhf2012/origin/Test/msgpb"
|
||||
"github.com/duanhf2012/origin/network"
|
||||
"github.com/duanhf2012/origin/sysservice"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"time"
|
||||
|
||||
"github.com/duanhf2012/origin/originnode"
|
||||
"github.com/duanhf2012/origin/service"
|
||||
|
||||
)
|
||||
|
||||
type SubNet1_Service struct {
|
||||
service.BaseService
|
||||
}
|
||||
|
||||
func init() {
|
||||
originnode.InitService(&SubNet1_Service{})
|
||||
}
|
||||
|
||||
//OnInit ...
|
||||
func (ws *SubNet1_Service) OnInit() error {
|
||||
sysservice.DefaultTSPbService().RegConnectEvent(ws.ConnEventHandler)
|
||||
sysservice.DefaultTSPbService().RegDisconnectEvent(ws.DisconnEventHandler)
|
||||
sysservice.DefaultTSPbService().RegExceptMessage(ws.ExceptMessage)
|
||||
sysservice.DefaultTSPbService().RegMessage(110,&msgpb.Test{},ws.MessageHandler)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
//OnRun ...
|
||||
func (ws *SubNet1_Service) OnRun() bool {
|
||||
|
||||
|
||||
time.Sleep(time.Second*10)
|
||||
var cli network.TcpSocketClient
|
||||
cli.Connect("127.0.0.1:9004")
|
||||
test := msgpb.Test{}
|
||||
test.AssistCount = proto.Int32(343)
|
||||
|
||||
|
||||
|
||||
cli.SendMsg(110,&test)
|
||||
cli.SendMsg(110,&test)
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
func (ws *SubNet1_Service) MessageHandler(pClient *network.SClient,msgtype uint16,msg proto.Message){
|
||||
}
|
||||
|
||||
func (ws *SubNet1_Service) ConnEventHandler (pClient *network.SClient){
|
||||
}
|
||||
|
||||
func (ws *SubNet1_Service) DisconnEventHandler (pClient *network.SClient){
|
||||
}
|
||||
|
||||
func (ws *SubNet1_Service) ExceptMessage(pClient *network.SClient,pPack *network.MsgBasePack,err error){
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "github.com/duanhf2012/origin/Test/logicservice"
|
||||
"github.com/duanhf2012/origin/cluster"
|
||||
"github.com/duanhf2012/origin/network"
|
||||
"github.com/duanhf2012/origin/originnode"
|
||||
"github.com/duanhf2012/origin/sysservice"
|
||||
"github.com/duanhf2012/origin/sysservice/originhttp"
|
||||
"github.com/duanhf2012/origin/network"
|
||||
)
|
||||
|
||||
|
||||
@@ -21,9 +22,7 @@ func (slf *TcpSocketServerReciver) OnDisconnect(pClient *network.SClient){
|
||||
|
||||
}
|
||||
|
||||
func (slf *TcpSocketServerReciver) OnRecvMsg(pClient *network.SClient, pPack *network.MsgBasePack){
|
||||
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
@@ -38,7 +37,7 @@ func main() {
|
||||
httpserver.SetHttps(ca.CertFile, ca.KeyFile)
|
||||
}
|
||||
|
||||
pTcpService := sysservice.NewTcpSocketPbService(":9004",&TcpSocketServerReciver{})
|
||||
pTcpService := sysservice.NewTcpSocketPbService(":9004")
|
||||
httpserver.SetPrintRequestTime(true)
|
||||
|
||||
node.SetupService(httpserver,pTcpService)
|
||||
|
||||
1
Test/msgpb/gen.bat
Normal file
1
Test/msgpb/gen.bat
Normal file
@@ -0,0 +1 @@
|
||||
protoc --go_out=. test.proto
|
||||
132
Test/msgpb/test.pb.go
Normal file
132
Test/msgpb/test.pb.go
Normal file
@@ -0,0 +1,132 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// source: test.proto
|
||||
|
||||
package msgpb
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
proto "github.com/golang/protobuf/proto"
|
||||
math "math"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
||||
|
||||
//*
|
||||
// @brief base_score_info
|
||||
type Test struct {
|
||||
WinCount *int32 `protobuf:"varint,1,opt,name=win_count,json=winCount" json:"win_count,omitempty"`
|
||||
LoseCount *int32 `protobuf:"varint,2,opt,name=lose_count,json=loseCount" json:"lose_count,omitempty"`
|
||||
ExceptionCount *int32 `protobuf:"varint,3,opt,name=exception_count,json=exceptionCount" json:"exception_count,omitempty"`
|
||||
KillCount *int32 `protobuf:"varint,4,opt,name=kill_count,json=killCount" json:"kill_count,omitempty"`
|
||||
DeathCount *int32 `protobuf:"varint,5,opt,name=death_count,json=deathCount" json:"death_count,omitempty"`
|
||||
AssistCount *int32 `protobuf:"varint,6,opt,name=assist_count,json=assistCount" json:"assist_count,omitempty"`
|
||||
Rating *int64 `protobuf:"varint,7,opt,name=rating" json:"rating,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *Test) Reset() { *m = Test{} }
|
||||
func (m *Test) String() string { return proto.CompactTextString(m) }
|
||||
func (*Test) ProtoMessage() {}
|
||||
func (*Test) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_c161fcfdc0c3ff1e, []int{0}
|
||||
}
|
||||
|
||||
func (m *Test) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_Test.Unmarshal(m, b)
|
||||
}
|
||||
func (m *Test) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_Test.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *Test) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_Test.Merge(m, src)
|
||||
}
|
||||
func (m *Test) XXX_Size() int {
|
||||
return xxx_messageInfo_Test.Size(m)
|
||||
}
|
||||
func (m *Test) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_Test.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_Test proto.InternalMessageInfo
|
||||
|
||||
func (m *Test) GetWinCount() int32 {
|
||||
if m != nil && m.WinCount != nil {
|
||||
return *m.WinCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Test) GetLoseCount() int32 {
|
||||
if m != nil && m.LoseCount != nil {
|
||||
return *m.LoseCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Test) GetExceptionCount() int32 {
|
||||
if m != nil && m.ExceptionCount != nil {
|
||||
return *m.ExceptionCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Test) GetKillCount() int32 {
|
||||
if m != nil && m.KillCount != nil {
|
||||
return *m.KillCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Test) GetDeathCount() int32 {
|
||||
if m != nil && m.DeathCount != nil {
|
||||
return *m.DeathCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Test) GetAssistCount() int32 {
|
||||
if m != nil && m.AssistCount != nil {
|
||||
return *m.AssistCount
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *Test) GetRating() int64 {
|
||||
if m != nil && m.Rating != nil {
|
||||
return *m.Rating
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Test)(nil), "msgpb.test")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("test.proto", fileDescriptor_c161fcfdc0c3ff1e) }
|
||||
|
||||
var fileDescriptor_c161fcfdc0c3ff1e = []byte{
|
||||
// 178 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x3c, 0x8c, 0x5d, 0x0a, 0x82, 0x40,
|
||||
0x14, 0x46, 0x99, 0xfc, 0x29, 0xaf, 0x51, 0xe0, 0x43, 0x08, 0x11, 0x59, 0x2f, 0xf9, 0xd4, 0x26,
|
||||
0xda, 0x81, 0x1b, 0x08, 0xb3, 0xc1, 0x86, 0x6c, 0x46, 0xbc, 0x37, 0x6c, 0xc5, 0xad, 0x23, 0x66,
|
||||
0xee, 0xe4, 0xe3, 0x77, 0xce, 0xe1, 0x03, 0x20, 0x89, 0x74, 0xee, 0x07, 0x43, 0x26, 0x8b, 0x5e,
|
||||
0xd8, 0xf6, 0xb7, 0xe3, 0x57, 0x40, 0x68, 0x69, 0xb6, 0x85, 0x64, 0x54, 0xfa, 0xda, 0x98, 0xb7,
|
||||
0xa6, 0x5c, 0x14, 0xa2, 0x8c, 0xaa, 0xc5, 0xa8, 0xf4, 0xc5, 0xee, 0x6c, 0x07, 0xd0, 0x19, 0x94,
|
||||
0xde, 0xce, 0x9c, 0x4d, 0x2c, 0x61, 0x7d, 0x82, 0xb5, 0xfc, 0x34, 0xb2, 0x27, 0x65, 0xfe, 0x0f,
|
||||
0x81, 0x6b, 0x56, 0x13, 0x9e, 0x7e, 0x9e, 0xaa, 0xeb, 0x7c, 0x13, 0xf2, 0x8f, 0x25, 0xac, 0xf7,
|
||||
0x90, 0xde, 0x65, 0x4d, 0x0f, 0xef, 0x23, 0xe7, 0xc1, 0x21, 0x0e, 0x0e, 0xb0, 0xac, 0x11, 0x15,
|
||||
0x92, 0x2f, 0x62, 0x57, 0xa4, 0xcc, 0x38, 0xd9, 0x40, 0x3c, 0xd4, 0xa4, 0x74, 0x9b, 0xcf, 0x0b,
|
||||
0x51, 0x06, 0x95, 0x5f, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x46, 0xa0, 0x89, 0x59, 0xfc, 0x00,
|
||||
0x00, 0x00,
|
||||
}
|
||||
18
Test/msgpb/test.proto
Normal file
18
Test/msgpb/test.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package msgpb;
|
||||
|
||||
|
||||
/**
|
||||
* @brief base_score_info
|
||||
*/
|
||||
message test{
|
||||
optional int32 win_count = 1; // 玩家胜局局数
|
||||
optional int32 lose_count = 2; // 玩家负局局数
|
||||
optional int32 exception_count = 3; // 玩家异常局局数
|
||||
optional int32 kill_count = 4; // 总人头数
|
||||
optional int32 death_count = 5; // 总死亡数
|
||||
optional int32 assist_count = 6; // 总总助攻数
|
||||
optional int64 rating = 7; // 评价积分
|
||||
}
|
||||
|
||||
42
network/tcpsocketclient.go
Normal file
42
network/tcpsocketclient.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"net"
|
||||
)
|
||||
|
||||
type TcpSocketClient struct {
|
||||
conn net.Conn
|
||||
}
|
||||
|
||||
func (slf *TcpSocketClient) Connect(addr string) error{
|
||||
tcpAddr,terr := net.ResolveTCPAddr("tcp",addr)
|
||||
if terr != nil {
|
||||
return terr
|
||||
}
|
||||
|
||||
conn,err := net.DialTCP("tcp",nil,tcpAddr)
|
||||
if err!=nil {
|
||||
fmt.Println("Client connect error ! " + err.Error())
|
||||
return err
|
||||
}
|
||||
slf.conn = conn
|
||||
|
||||
//
|
||||
return nil
|
||||
}
|
||||
|
||||
func (slf *TcpSocketClient) SendMsg(packtype uint16,message proto.Message) error{
|
||||
var msg MsgBasePack
|
||||
data,err := proto.Marshal(message)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
msg.Make(packtype,data)
|
||||
|
||||
slf.conn.Write(msg.Bytes())
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/duanhf2012/origin/service"
|
||||
"io"
|
||||
"net"
|
||||
"unsafe"
|
||||
|
||||
"os"
|
||||
"time"
|
||||
@@ -23,11 +24,12 @@ type SClient struct {
|
||||
id uint64
|
||||
conn net.Conn
|
||||
|
||||
recvPack util.SyncQueue
|
||||
sendPack util.SyncQueue
|
||||
recvPack *util.SyncQueue
|
||||
sendPack *util.SyncQueue
|
||||
tcpserver *TcpSocketServer
|
||||
remoteip string
|
||||
starttime int64
|
||||
bClose bool
|
||||
}
|
||||
|
||||
type TcpSocketServer struct {
|
||||
@@ -46,6 +48,15 @@ type MsgBasePack struct {
|
||||
StartTime time.Time
|
||||
}
|
||||
|
||||
func (slf *MsgBasePack) PackType() uint16 {
|
||||
return slf.packtype
|
||||
}
|
||||
|
||||
func (slf *MsgBasePack) Body() []byte{
|
||||
return slf.body
|
||||
}
|
||||
|
||||
|
||||
func (slf *TcpSocketServer) Register(listenAddr string,iReciver ITcpSocketServerReciver){
|
||||
slf.listenAddr = listenAddr
|
||||
slf.iReciver = iReciver
|
||||
@@ -80,7 +91,8 @@ func (slf *TcpSocketServer) listenServer(){
|
||||
continue
|
||||
}
|
||||
|
||||
sc :=&SClient{id:clientId,conn:conn,tcpserver:slf,remoteip:conn.RemoteAddr().String(),starttime:time.Now().UnixNano()}
|
||||
sc :=&SClient{id:clientId,conn:conn,tcpserver:slf,remoteip:conn.RemoteAddr().String(),starttime:time.Now().UnixNano(),
|
||||
recvPack:util.NewSyncQueue(),sendPack:util.NewSyncQueue()}
|
||||
slf.iReciver.OnConnected(sc)
|
||||
util.Go(sc.listendata)
|
||||
//收来自客户端数据
|
||||
@@ -98,6 +110,7 @@ func (slf *TcpSocketServer) listenServer(){
|
||||
func (slf *SClient) listendata(){
|
||||
defer func() {
|
||||
slf.tcpserver.iReciver.OnDisconnect(slf)
|
||||
slf.bClose = true
|
||||
slf.conn.Close()
|
||||
slf.tcpserver.mapClient.Del(slf.id)
|
||||
}()
|
||||
@@ -137,12 +150,14 @@ func (slf *SClient) listendata(){
|
||||
}
|
||||
|
||||
|
||||
func (slf *MsgBasePack) Bytes() (bRet []byte){
|
||||
func (slf *MsgBasePack) Bytes() []byte{
|
||||
var bRet []byte
|
||||
bRet = make([]byte,4)
|
||||
binary.BigEndian.PutUint16(bRet,slf.packsize)
|
||||
binary.BigEndian.PutUint16(bRet,slf.packtype)
|
||||
binary.BigEndian.PutUint16(bRet[2:],slf.packtype)
|
||||
bRet = append(bRet,slf.body...)
|
||||
|
||||
return
|
||||
return bRet
|
||||
}
|
||||
|
||||
//返回值:填充多少字节,是否完成
|
||||
@@ -155,7 +170,7 @@ func (slf *MsgBasePack) FillData(bdata []byte,datasize uint16) (uint16,bool) {
|
||||
}
|
||||
|
||||
slf.packsize= binary.BigEndian.Uint16(bdata[:2])
|
||||
slf.packtype= binary.BigEndian.Uint16(bdata[2:2])
|
||||
slf.packtype= binary.BigEndian.Uint16(bdata[2:4])
|
||||
fillsize += 4
|
||||
}
|
||||
|
||||
@@ -172,6 +187,12 @@ func (slf *MsgBasePack) FillData(bdata []byte,datasize uint16) (uint16,bool) {
|
||||
func (slf *MsgBasePack) Clear() {
|
||||
}
|
||||
|
||||
func (slf *MsgBasePack) Make(packtype uint16,data []byte) {
|
||||
slf.packtype = packtype
|
||||
slf.body = data
|
||||
slf.packsize = uint16(unsafe.Sizeof(slf.packtype)*2)+uint16(len(data))
|
||||
}
|
||||
|
||||
func (slf *SClient) Send(pack *MsgBasePack){
|
||||
slf.sendPack.Push(pack)
|
||||
}
|
||||
@@ -199,5 +220,9 @@ func (slf *SClient) onrecv(){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (slf *SClient) Close(){
|
||||
if slf.bClose == false {
|
||||
slf.conn.Close()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,38 @@
|
||||
package sysservice
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/duanhf2012/origin/network"
|
||||
"github.com/duanhf2012/origin/service"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type TcpSocketPbService struct {
|
||||
service.BaseService
|
||||
listenaddr string
|
||||
tcpsocketserver network.TcpSocketServer
|
||||
reciver network.ITcpSocketServerReciver
|
||||
mapMsg map[uint16]MessageInfo
|
||||
|
||||
connEvent EventHandler
|
||||
disconnEvent EventHandler
|
||||
|
||||
exceptMsgHandler ExceptMsgHandler
|
||||
}
|
||||
|
||||
|
||||
func NewTcpSocketPbService(listenaddr string,reciver network.ITcpSocketServerReciver) *TcpSocketPbService {
|
||||
type MessageHandler func(pClient *network.SClient,msgtype uint16,msg proto.Message)
|
||||
type EventHandler func(pClient *network.SClient)
|
||||
type ExceptMsgHandler func(pClient *network.SClient,pPack *network.MsgBasePack,err error)
|
||||
|
||||
|
||||
|
||||
func NewTcpSocketPbService(listenaddr string) *TcpSocketPbService {
|
||||
ts := new(TcpSocketPbService)
|
||||
|
||||
ts.listenaddr = listenaddr
|
||||
ts.reciver = reciver
|
||||
|
||||
ts.tcpsocketserver.Register(listenaddr,reciver)
|
||||
ts.mapMsg = make(map[uint16]MessageInfo,1)
|
||||
ts.tcpsocketserver.Register(listenaddr,ts)
|
||||
return ts
|
||||
}
|
||||
|
||||
@@ -29,6 +42,97 @@ func (slf *TcpSocketPbService) OnInit() error {
|
||||
|
||||
func (slf *TcpSocketPbService) OnRun() bool {
|
||||
slf.tcpsocketserver.Start()
|
||||
|
||||
/*
|
||||
slf.RegisterMessage(10,&msgpb.Test{},slf.Test)
|
||||
var testpack network.MsgBasePack
|
||||
a := msgpb.Test{}
|
||||
a.WinCount =proto.Int32(33)
|
||||
d,err := proto.Marshal(&a)
|
||||
fmt.Print(err)
|
||||
|
||||
testpack.Make(10,d)
|
||||
slf.OnRecvMsg(nil,&testpack)
|
||||
|
||||
*/
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
type MessageInfo struct {
|
||||
msgType reflect.Type
|
||||
msgHandler MessageHandler
|
||||
}
|
||||
|
||||
|
||||
func (slf *TcpSocketPbService) RegMessage(msgtype uint16,msg proto.Message,handle MessageHandler){
|
||||
var info MessageInfo
|
||||
|
||||
info.msgType = reflect.TypeOf(msg.(proto.Message))
|
||||
info.msgHandler = handle
|
||||
slf.mapMsg[msgtype] = info
|
||||
}
|
||||
|
||||
func (slf *TcpSocketPbService) RegConnectEvent(eventHandler EventHandler){
|
||||
slf.connEvent = eventHandler
|
||||
}
|
||||
|
||||
func (slf *TcpSocketPbService) RegDisconnectEvent(eventHandler EventHandler){
|
||||
slf.disconnEvent = eventHandler
|
||||
}
|
||||
|
||||
func (slf *TcpSocketPbService) RegExceptMessage(exceptMsgHandler ExceptMsgHandler){
|
||||
slf.exceptMsgHandler = exceptMsgHandler
|
||||
}
|
||||
|
||||
|
||||
func (slf *TcpSocketPbService) OnConnected(pClient *network.SClient){
|
||||
if slf.connEvent!=nil {
|
||||
slf.connEvent(pClient)
|
||||
}
|
||||
}
|
||||
|
||||
func (slf *TcpSocketPbService) OnDisconnect(pClient *network.SClient){
|
||||
if slf.disconnEvent!=nil {
|
||||
slf.disconnEvent(pClient)
|
||||
}
|
||||
}
|
||||
|
||||
func (slf *TcpSocketPbService) OnExceptMsg (pClient *network.SClient,pPack *network.MsgBasePack,err error){
|
||||
if slf.exceptMsgHandler!=nil {
|
||||
slf.exceptMsgHandler(pClient,pPack,err)
|
||||
}else{
|
||||
pClient.Close()
|
||||
//记录日志
|
||||
service.GetLogger().Printf(service.LEVER_WARN, "OnExceptMsg packtype %d,error %+v",pPack.PackType(),err)
|
||||
}
|
||||
}
|
||||
|
||||
func (slf *TcpSocketPbService) OnRecvMsg(pClient *network.SClient, pPack *network.MsgBasePack){
|
||||
if info, ok := slf.mapMsg[pPack.PackType()]; ok {
|
||||
msg := reflect.New(info.msgType.Elem()).Interface()
|
||||
tmp := msg.(proto.Message)
|
||||
err := proto.Unmarshal(pPack.Body(), tmp)
|
||||
if err != nil {
|
||||
slf.OnExceptMsg(pClient,pPack,err)
|
||||
return
|
||||
}
|
||||
|
||||
info.msgHandler(pClient,pPack.PackType(), msg.(proto.Message))
|
||||
return
|
||||
}
|
||||
|
||||
slf.OnExceptMsg(pClient,pPack,errors.New("not found PackType"))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func DefaultTSPbService() *TcpSocketPbService{
|
||||
iservice := service.InstanceServiceMgr().FindService("TcpSocketPbService")
|
||||
if iservice == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return iservice.(*TcpSocketPbService)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user