mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
增加消息发送
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package network
|
package network
|
||||||
|
|
||||||
|
|
||||||
type Processor interface {
|
type Processor interface {
|
||||||
// must goroutine safe
|
// must goroutine safe
|
||||||
Route(msg interface{}, userData interface{}) error
|
Route(msg interface{}, userData interface{}) error
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ type MessageInfo struct {
|
|||||||
msgHandler MessageHandler
|
msgHandler MessageHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MessageHandler func(clientid uint64,msg proto.Message)
|
||||||
|
const MsgTypeSize = 2
|
||||||
type PBProcessor struct {
|
type PBProcessor struct {
|
||||||
mapMsg map[uint16]MessageInfo
|
mapMsg map[uint16]MessageInfo
|
||||||
LittleEndian bool
|
LittleEndian bool
|
||||||
@@ -65,10 +66,22 @@ func (slf *PBProcessor ) Unmarshal(data []byte) (interface{}, error) {
|
|||||||
|
|
||||||
// must goroutine safe
|
// must goroutine safe
|
||||||
func (slf *PBProcessor ) Marshal(msg interface{}) ([]byte, error){
|
func (slf *PBProcessor ) Marshal(msg interface{}) ([]byte, error){
|
||||||
return proto.Marshal(msg.(proto.Message))
|
bytes,err := proto.Marshal(msg.(proto.Message))
|
||||||
}
|
if err != nil {
|
||||||
|
return nil,err
|
||||||
|
}
|
||||||
|
|
||||||
type MessageHandler func(clientid uint64,msg proto.Message)
|
buff := make([]byte, 0, len(bytes)+MsgTypeSize)
|
||||||
|
pMsg := msg.(*PBPackInfo)
|
||||||
|
if slf.LittleEndian == true {
|
||||||
|
binary.LittleEndian.PutUint16(buff[:2],pMsg.typ)
|
||||||
|
}else{
|
||||||
|
binary.BigEndian.PutUint16(buff[:2],pMsg.typ)
|
||||||
|
}
|
||||||
|
|
||||||
|
buff = append(buff,bytes...)
|
||||||
|
return buff,nil
|
||||||
|
}
|
||||||
|
|
||||||
func (slf *PBProcessor) Register(msgtype uint16,msg proto.Message,handle MessageHandler) {
|
func (slf *PBProcessor) Register(msgtype uint16,msg proto.Message,handle MessageHandler) {
|
||||||
var info MessageInfo
|
var info MessageInfo
|
||||||
@@ -77,3 +90,7 @@ func (slf *PBProcessor) Register(msgtype uint16,msg proto.Message,handle Message
|
|||||||
info.msgHandler = handle
|
info.msgHandler = handle
|
||||||
slf.mapMsg[msgtype] = info
|
slf.mapMsg[msgtype] = info
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *PBProcessor) MakeMsg(msgType uint16,protoMsg proto.Message) *PBPackInfo {
|
||||||
|
return &PBPackInfo{typ:msgType,msg:protoMsg}
|
||||||
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ func (slf *TcpService) OnInit() error{
|
|||||||
if ok == true {
|
if ok == true {
|
||||||
slf.tcpServer.MaxMsgLen = uint32(MaxMsgLen.(float64))
|
slf.tcpServer.MaxMsgLen = uint32(MaxMsgLen.(float64))
|
||||||
}
|
}
|
||||||
|
slf.mapClient = make( map[uint64] *Client,slf.tcpServer.MaxConnNum)
|
||||||
slf.tcpServer.NewAgent =slf.NewClient
|
slf.tcpServer.NewAgent =slf.NewClient
|
||||||
slf.tcpServer.Start()
|
slf.tcpServer.Start()
|
||||||
//加载配置
|
//加载配置
|
||||||
@@ -86,6 +87,7 @@ func (slf *TcpService) NewClient(conn *network.TCPConn) network.Agent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pClient := &Client{tcpConn:conn}
|
pClient := &Client{tcpConn:conn}
|
||||||
|
pClient.tcpService = slf
|
||||||
slf.mapClient[slf.initClientId] = pClient
|
slf.mapClient[slf.initClientId] = pClient
|
||||||
return pClient
|
return pClient
|
||||||
}
|
}
|
||||||
@@ -124,7 +126,6 @@ func (slf *Client) Run() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
slf.tcpService.GetEventReciver().NotifyEvent(&event.Event{Type:event.Sys_Event_Tcp_RecvPack,Data:&TcpPack{ClientId:slf.id,Data:data}})
|
slf.tcpService.GetEventReciver().NotifyEvent(&event.Event{Type:event.Sys_Event_Tcp_RecvPack,Data:&TcpPack{ClientId:slf.id,Data:data}})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,3 +136,19 @@ func (slf *Client) OnClose(){
|
|||||||
defer slf.tcpService.mapClientLocker.Unlock()
|
defer slf.tcpService.mapClientLocker.Unlock()
|
||||||
delete (slf.tcpService.mapClient,slf.GetId())
|
delete (slf.tcpService.mapClient,slf.GetId())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *TcpService) SendMsg(clientid uint64,msg interface{}) error{
|
||||||
|
slf.mapClientLocker.Lock()
|
||||||
|
client,ok := slf.mapClient[clientid]
|
||||||
|
if ok == false{
|
||||||
|
slf.mapClientLocker.Unlock()
|
||||||
|
return fmt.Errorf("client %d is disconnect!",clientid)
|
||||||
|
}
|
||||||
|
|
||||||
|
slf.mapClientLocker.Unlock()
|
||||||
|
bytes,err := slf.process.Marshal(msg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return client.tcpConn.WriteMsg(bytes)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user