diff options
| author | raven <citrons@mondecitronne.com> | 2026-03-26 14:49:58 -0500 |
|---|---|---|
| committer | raven <citrons@mondecitronne.com> | 2026-03-27 18:32:38 -0500 |
| commit | 214ddf63a19d66b1ea039ea05b0f5a099f682b9d (patch) | |
| tree | bd0df5937bb6cb569af9da0b768994383a6989e9 /server/map.go | |
| parent | 680875b5afece00a5dce5562ffafeea757c9931d (diff) | |
initial broken attempt at implementing this idea
it doesn't work. I may have made a silly mistake somewhere, or didn't properly
understand the RFC specification
Diffstat (limited to 'server/map.go')
| -rw-r--r-- | server/map.go | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/server/map.go b/server/map.go index e84ca55..f210d42 100644 --- a/server/map.go +++ b/server/map.go @@ -95,6 +95,9 @@ func (v *blockVolume) unsyncSetBlock(p blockPos, t blockType) { } func (v *blockVolume) unsyncFlushChanges() { + if len(v.changes) == 0 { + return + } var ( oldRuns = v.blockRuns changes = v.changes @@ -198,21 +201,14 @@ func (v *blockVolume) unsyncBlocksInRange(min, max blockPos) []blockType { func (v *blockVolume) syncCompressForNetwork(/*highBits bool*/) io.ReadCloser { rd, wr := io.Pipe() go func() { - defer wr.Close() - z := gzip.NewWriter(wr) - defer z.Close() - bw := bufio.NewWriter(z) - defer bw.Flush() - v.RLock() defer v.RUnlock() - binary.Write(bw, binary.BigEndian, uint32(v.size.X*v.size.Y*v.size.Z)) - for block := range v.unsyncGetAll() { - err := bw.WriteByte(byte(block)) - if err != nil { - return - } - } + bw := bufio.NewWriter(wr) + defer bw.Flush() + writePointlessGzipHeader(bw) + len := uint32(v.size.X*v.size.Y*v.size.Z) + deflateRuns(wr, v.blockRuns, v.changes, len) + writePointlessGzipTrailer(bw, len) }() return rd } |
