Skip to content

Commit 33902ef

Browse files
Copilotriccardobl
andauthored
Make ZIPCompressedMessage compression level instance-scoped while preserving (deprecated) legacy static API (jMonkeyEngine#2783)
* Initial plan * 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> * Clarify ZIP compression level semantics in documentation Agent-Logs-Url: https://github.com/jMonkeyEngine/jmonkeyengine/sessions/52dd3a6c-82f7-4d23-8ba2-a85f8b13e5ac Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com> * Deprecate static ZIPCompressedMessage setLevel API Agent-Logs-Url: https://github.com/jMonkeyEngine/jmonkeyengine/sessions/bbfe269e-4cd7-4d65-adc9-240b6260bd76 Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com> * Add getCompressionLevel and deprecate getLevel Agent-Logs-Url: https://github.com/jMonkeyEngine/jmonkeyengine/sessions/08ec37e2-ef3d-45a6-ad4c-89f1bcdf477d Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com> * Expand deprecated getLevel coverage in ZIPCompressedMessageTest Agent-Logs-Url: https://github.com/jMonkeyEngine/jmonkeyengine/sessions/08ec37e2-ef3d-45a6-ad4c-89f1bcdf477d Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com>
1 parent 57f87fa commit 33902ef

2 files changed

Lines changed: 111 additions & 6 deletions

File tree

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

Lines changed: 33 additions & 6 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,23 +68,49 @@ 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 weakest compression but quickest and 9 is the best
77+
* compression but slowest. Default is 6.
7678
*
7779
* @param level The level.
80+
* @deprecated Use {@link #setCompressionLevel(int)} to configure an instance-specific
81+
* compression level.
7882
*/
83+
@Deprecated
7984
public static void setLevel(int level) {
85+
defaultCompressionLevel = level;
86+
}
87+
88+
/**
89+
* Sets this message's compression level.
90+
*
91+
* @param level The level.
92+
*/
93+
public void setCompressionLevel(int level) {
8094
compressionLevel = level;
8195
}
8296

8397
/**
84-
* Returns the currently globally configured ZIP compression level.
98+
* Returns this message's configured ZIP compression level.
8599
*
86100
* @return the ZIP compression level
87101
*/
88-
public int getLevel() { return compressionLevel; }
102+
public int getCompressionLevel() {
103+
return compressionLevel;
104+
}
105+
106+
/**
107+
* Returns this message's configured ZIP compression level.
108+
*
109+
* @return the ZIP compression level
110+
* @deprecated Use {@link #getCompressionLevel()} instead.
111+
*/
112+
@Deprecated
113+
public int getLevel() {
114+
return getCompressionLevel();
115+
}
89116
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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.getCompressionLevel());
56+
assertEquals(first.getCompressionLevel(), first.getLevel());
57+
assertEquals(1, second.getCompressionLevel());
58+
assertEquals(second.getCompressionLevel(), second.getLevel());
59+
assertEquals(6, third.getCompressionLevel());
60+
assertEquals(third.getCompressionLevel(), third.getLevel());
61+
}
62+
63+
@Test
64+
public void testStaticLevelRemainsDefaultForNewMessages() {
65+
ZIPCompressedMessage.setLevel(9);
66+
67+
ZIPCompressedMessage first = new ZIPCompressedMessage(new TestMessage());
68+
69+
ZIPCompressedMessage.setLevel(4);
70+
ZIPCompressedMessage second = new ZIPCompressedMessage(new TestMessage());
71+
72+
assertEquals(9, first.getCompressionLevel());
73+
assertEquals(4, second.getCompressionLevel());
74+
}
75+
76+
private static class TestMessage extends AbstractMessage {
77+
}
78+
}

0 commit comments

Comments
 (0)