aceld / aceld/zinx

connection.go SendBuffMsg函数代码重复

Aberta
#292 3 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Go
Estrelas
7.8k
Forks
1.3k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

原函数
```ruby
func (c *Connection) SendBuffMsg(msgID uint32, data []byte) error {
if c.isClosed() == true {
return errors.New("connection closed when send buff msg")
}
if c.msgBuffChan == nil && c.setStartWriterFlag() {
c.msgBuffChan = make(chan []byte, zconf.GlobalObject.MaxMsgChanLen)
// Start a Goroutine to write data back to the client
// This method only reads data from the MsgBuffChan without allocating memory or starting a Goroutine
// (开启用于写回客户端数据流程的Goroutine
// 此方法只读取MsgBuffChan中的数据没调用SendBuffMsg可以分配内存和启用协程)
go c.StartWriter()
}

idleTimeout := time.NewTimer(5 * time.Millisecond)
defer idleTimeout.Stop()

msg, err := c.packet.Pack(zpack.NewMsgPackage(msgID, data))
if err != nil {
zlog.Ins().ErrorF("Pack error msg ID = %d", msgID)
return errors.New("Pack error msg ")
}

// send timeout
select {
case <-idleTimeout.C:
return errors.New("send buff msg timeout")
case c.msgBuffChan <- msg:
return nil
}
}
```
其实前文已经写了一个SendToQueue的函数,却没有调用,因此代码可以简化为
```ruby
func (c *Connection) SendBuffMsg(msgID uint32, data []byte) error {
msg, err := c.packet.Pack(zpack.NewMsgPackage(msgID, data))
if err != nil {
zlog.Ins().ErrorF("Pack error msg ID = %d", msgID)
return errors.New("Pack error msg ")
}
return c.SendToQueue(msg)
}
```

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.