zinx icon indicating copy to clipboard operation
zinx copied to clipboard

connection.go SendBuffMsg函数代码重复

Open trash-boy opened this issue 1 year ago • 3 comments

原函数

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的函数,却没有调用,因此代码可以简化为

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)
}

trash-boy avatar Dec 15 '23 08:12 trash-boy

@trash-boy 您可以对此提交PR

aceld avatar Dec 18 '23 07:12 aceld

SendBuffMsg

提交PR了,请您看一看

trash-boy avatar Dec 18 '23 10:12 trash-boy

@trash-boy 感谢提交PR,已merge, https://github.com/aceld/zinx/pull/295

aceld avatar Dec 19 '23 02:12 aceld