aceld / aceld/zinx

connection.go SendBuffMsg函数代码重复

Ouverte
#292 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Go
Étoiles
7.8k
Forks
1.3k
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

原函数
```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)
}
```

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.