summaryrefslogtreecommitdiff
path: root/server/map.go
diff options
context:
space:
mode:
authorraven <citrons@mondecitronne.com>2026-03-26 14:49:58 -0500
committerraven <citrons@mondecitronne.com>2026-03-27 18:32:38 -0500
commit214ddf63a19d66b1ea039ea05b0f5a099f682b9d (patch)
treebd0df5937bb6cb569af9da0b768994383a6989e9 /server/map.go
parent680875b5afece00a5dce5562ffafeea757c9931d (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.go22
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
}