package packets import ( "bytes" "compress/zlib" "io" ) type EQ2Compressor struct { level int } func NewEQ2Compressor() *EQ2Compressor { return &EQ2Compressor{level: zlib.DefaultCompression} } func (c *EQ2Compressor) Compress(data []byte) ([]byte, error) { if len(data) == 0 { return data, nil } var buf bytes.Buffer writer, err := zlib.NewWriterLevel(&buf, c.level) if err != nil { return nil, err } _, err = writer.Write(data) if err != nil { writer.Close() return nil, err } err = writer.Close() if err != nil { return nil, err } return buf.Bytes(), nil } func (c *EQ2Compressor) Decompress(data []byte) ([]byte, error) { if len(data) == 0 { return data, nil } reader, err := zlib.NewReader(bytes.NewReader(data)) if err != nil { return nil, err } defer reader.Close() var buf bytes.Buffer _, err = io.Copy(&buf, reader) if err != nil { return nil, err } return buf.Bytes(), nil } func (c *EQ2Compressor) ShouldCompress(data []byte) bool { return len(data) > 100 // EQ2 compression threshold }