Skip to content

Commit 1ae7168

Browse files
Copilotriccardobl
andauthored
Fix ZIPCompressedMessage compression level to be per-instance
Agent-Logs-Url: https://github.com/jMonkeyEngine/jmonkeyengine/sessions/52dd3a6c-82f7-4d23-8ba2-a85f8b13e5ac Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com>
1 parent 461820f commit 1ae7168

2 files changed

Lines changed: 91 additions & 5 deletions

File tree

jme3-networking/src/main/java/com/jme3/network/message/ZIPCompressedMessage.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
*/
4242
@Serializable()
4343
public class ZIPCompressedMessage extends CompressedMessage {
44-
private static int compressionLevel = 6;
44+
private static int defaultCompressionLevel = 6;
45+
private int compressionLevel = defaultCompressionLevel;
4546

4647
/**
4748
* Creates an empty ZIP-compressed message for serialization.
@@ -67,21 +68,31 @@ public ZIPCompressedMessage(Message msg) {
6768
*/
6869
public ZIPCompressedMessage(Message msg, int level) {
6970
super(msg);
70-
setLevel(level);
71+
this.compressionLevel = level;
7172
}
7273

7374
/**
74-
* Set the compression level, where 1 is the best compression but slower and 9 is the weakest
75-
* compression but the quickest. Default is 6.
75+
* Set the default compression level for newly created ZIP compressed messages,
76+
* where 1 is the best compression but slower and 9 is the weakest compression
77+
* but the quickest. Default is 6.
7678
*
7779
* @param level The level.
7880
*/
7981
public static void setLevel(int level) {
82+
defaultCompressionLevel = level;
83+
}
84+
85+
/**
86+
* Sets this message's compression level.
87+
*
88+
* @param level The level.
89+
*/
90+
public void setCompressionLevel(int level) {
8091
compressionLevel = level;
8192
}
8293

8394
/**
84-
* Returns the currently globally configured ZIP compression level.
95+
* Returns this message's configured ZIP compression level.
8596
*
8697
* @return the ZIP compression level
8798
*/
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright (c) 2009-2026 jMonkeyEngine
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are
7+
* met:
8+
*
9+
* * Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
*
12+
* * Redistributions in binary form must reproduce the above copyright
13+
* notice, this list of conditions and the following disclaimer in the
14+
* documentation and/or other materials provided with the distribution.
15+
*
16+
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
*/
32+
package com.jme3.network.message;
33+
34+
import com.jme3.network.AbstractMessage;
35+
import org.junit.jupiter.api.AfterEach;
36+
import org.junit.jupiter.api.Test;
37+
38+
import static org.junit.jupiter.api.Assertions.assertEquals;
39+
40+
public class ZIPCompressedMessageTest {
41+
42+
@AfterEach
43+
public void resetCompressionDefault() {
44+
ZIPCompressedMessage.setLevel(6);
45+
}
46+
47+
@Test
48+
public void testMessageSpecificCompressionLevelDoesNotLeakToOtherMessages() {
49+
ZIPCompressedMessage.setLevel(6);
50+
51+
ZIPCompressedMessage first = new ZIPCompressedMessage(new TestMessage());
52+
ZIPCompressedMessage second = new ZIPCompressedMessage(new TestMessage(), 1);
53+
ZIPCompressedMessage third = new ZIPCompressedMessage(new TestMessage());
54+
55+
assertEquals(6, first.getLevel());
56+
assertEquals(1, second.getLevel());
57+
assertEquals(6, third.getLevel());
58+
}
59+
60+
@Test
61+
public void testStaticLevelRemainsDefaultForNewMessages() {
62+
ZIPCompressedMessage.setLevel(9);
63+
64+
ZIPCompressedMessage first = new ZIPCompressedMessage(new TestMessage());
65+
66+
ZIPCompressedMessage.setLevel(4);
67+
ZIPCompressedMessage second = new ZIPCompressedMessage(new TestMessage());
68+
69+
assertEquals(9, first.getLevel());
70+
assertEquals(4, second.getLevel());
71+
}
72+
73+
private static class TestMessage extends AbstractMessage {
74+
}
75+
}

0 commit comments

Comments
 (0)