Skip to content

feat: add custom frame decoder support for custom packet splitting#397

Closed
valiner wants to merge 2 commits intoaceld:masterfrom
valiner:feat/custom-frame-decoder
Closed

feat: add custom frame decoder support for custom packet splitting#397
valiner wants to merge 2 commits intoaceld:masterfrom
valiner:feat/custom-frame-decoder

Conversation

@valiner
Copy link
Contributor

@valiner valiner commented Mar 11, 2026

This PR resolves issue #384

Allow users to define custom frame decoders for handling packet splitting without length field information.

Changes:

  • Add SetFrameDecoder/GetFrameDecoder to IServer and IClient interfaces
  • Update connection.go, kcp_connection.go, ws_connection.go to support custom frame decoder
  • Add example demonstrating custom frame decoder usage

…ug disabled

- Add IsDebugEnabled() method to ILogger interface and ZinxLoggerCore
- Wrap hex.EncodeToString() calls with IsDebugEnabled() check
- This prevents unnecessary hex encoding when debug logging is disabled
- Fixes issue aceld#366

Affected files:
- zlog/ziface/ilogger.go: Add IsDebugEnabled() interface
- zlog/logger_core.go: Implement IsDebugEnabled()
- zlog/default.go: Add IsDebugEnabled() to default logger
- zlog/stdzlog.go: Add global IsDebugEnabled()
- znet/msghandler.go, connection.go, kcp_connection.go, ws_connection.go
- zdecoder/htlvcrcdecoder.go
- examples/zinx_decoder/
…itting

This feature allows users to define custom frame decoders for handling
packet splitting without length field information.

Changes:
- Add SetFrameDecoder/GetFrameDecoder methods to IServer interface
- Add SetFrameDecoder/GetFrameDecoder methods to IClient interface
- Add frameDecoder field to Server and Client structs
- Update Connection, KcpConnection, WsConnection to use custom frame decoder
- Add example demonstrating custom frame decoder usage

Usage:
  // Create custom frame decoder
  type CustomFrameDecoder struct{}

  func (d *CustomFrameDecoder) Decode(buff []byte) [][]byte {
      // Split by '\r' delimiter
      ...
  }

  // Use with server
  server := zinx.NewServer()
  server.SetFrameDecoder(&CustomFrameDecoder{})
  server.Serve()

This resolves issue aceld#384.
@valiner valiner closed this Mar 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants