add concept of framing to net.tcp

This commit is contained in:
Joel Wetzell
2025-11-18 21:02:48 -06:00
parent 9ad60c8193
commit 86966132ca
5 changed files with 112 additions and 10 deletions

View File

@@ -0,0 +1,6 @@
package framing
type Framer interface {
Frame([]byte) [][]byte
Clear()
}

View File

@@ -0,0 +1,33 @@
package framing
import (
"bytes"
)
type ByteSeparatorFramer struct {
buffer []byte
separator []byte
}
func NewByteSeparatorFramer(separator []byte) *ByteSeparatorFramer {
return &ByteSeparatorFramer{separator: separator, buffer: []byte{}}
}
func (bsf *ByteSeparatorFramer) Frame(data []byte) [][]byte {
messages := [][]byte{}
bsf.buffer = append(bsf.buffer, data...)
parts := bytes.Split(bsf.buffer, bsf.separator)
if len(parts) > 0 {
bsf.buffer = parts[len(parts)-1]
messages = parts[:len(parts)-1]
}
return messages
}
func (bsf *ByteSeparatorFramer) Clear() {
bsf.buffer = []byte{}
}