Skip to content

Commit cf3bf11

Browse files
authored
Restore ConnectionSetupPayload as abstract class (#785)
Another follow-up fix for commit 0ac54d4. Changing ConnectionSetupPayload from abstract class to interface is problematic when framework code compiled against newer RSocket is used in an application on existing version. ConnectionSetupPayload is now an abstract class again but DefaultConnectionSetupPayload remains in the "core" sub-package to avoid the package cycle with "frame". See gh-778 Signed-off-by: Rossen Stoyanchev <rstoyanchev@pivotal.io>
1 parent c99c5ae commit cf3bf11

2 files changed

Lines changed: 64 additions & 46 deletions

File tree

rsocket-core/src/main/java/io/rsocket/ConnectionSetupPayload.java

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,60 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16+
1617
package io.rsocket;
1718

1819
import io.netty.buffer.ByteBuf;
19-
import io.netty.util.ReferenceCounted;
20+
import io.netty.util.AbstractReferenceCounted;
21+
import io.rsocket.core.DefaultConnectionSetupPayload;
2022
import javax.annotation.Nullable;
2123

2224
/**
2325
* Exposes information from the {@code SETUP} frame to a server, as well as to client responders.
2426
*/
25-
public interface ConnectionSetupPayload extends ReferenceCounted, Payload {
27+
public abstract class ConnectionSetupPayload extends AbstractReferenceCounted implements Payload {
2628

27-
String metadataMimeType();
29+
public abstract String metadataMimeType();
2830

29-
String dataMimeType();
31+
public abstract String dataMimeType();
3032

31-
int keepAliveInterval();
33+
public abstract int keepAliveInterval();
3234

33-
int keepAliveMaxLifetime();
35+
public abstract int keepAliveMaxLifetime();
3436

35-
int getFlags();
37+
public abstract int getFlags();
3638

37-
boolean willClientHonorLease();
39+
public abstract boolean willClientHonorLease();
3840

39-
boolean isResumeEnabled();
41+
public abstract boolean isResumeEnabled();
4042

4143
@Nullable
42-
ByteBuf resumeToken();
44+
public abstract ByteBuf resumeToken();
45+
46+
@Override
47+
public ConnectionSetupPayload retain() {
48+
super.retain();
49+
return this;
50+
}
51+
52+
@Override
53+
public ConnectionSetupPayload retain(int increment) {
54+
super.retain(increment);
55+
return this;
56+
}
57+
58+
@Override
59+
public abstract ConnectionSetupPayload touch();
60+
61+
/**
62+
* Create a {@code ConnectionSetupPayload}.
63+
*
64+
* @deprecated as of 1.0 RC7. Please, use {@link
65+
* DefaultConnectionSetupPayload#DefaultConnectionSetupPayload(ByteBuf)
66+
* DefaultConnectionSetupPayload} constructor.
67+
*/
68+
@Deprecated
69+
public static ConnectionSetupPayload create(final ByteBuf setupFrame) {
70+
return new DefaultConnectionSetupPayload(setupFrame);
71+
}
4372
}

rsocket-core/src/main/java/io/rsocket/core/DefaultConnectionSetupPayload.java

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717
package io.rsocket.core;
1818

1919
import io.netty.buffer.ByteBuf;
20-
import io.netty.util.AbstractReferenceCounted;
2120
import io.rsocket.ConnectionSetupPayload;
2221
import io.rsocket.frame.FrameHeaderFlyweight;
2322
import io.rsocket.frame.SetupFrameFlyweight;
2423

25-
/** Default implementation of {@link ConnectionSetupPayload}. */
26-
class DefaultConnectionSetupPayload extends AbstractReferenceCounted
27-
implements ConnectionSetupPayload {
24+
/**
25+
* Default implementation of {@link ConnectionSetupPayload}. Primarily for internal use within
26+
* RSocket Java but may be created in an application, e.g. for testing purposes.
27+
*/
28+
public class DefaultConnectionSetupPayload extends ConnectionSetupPayload {
2829

2930
private final ByteBuf setupFrame;
3031

@@ -33,30 +34,28 @@ public DefaultConnectionSetupPayload(ByteBuf setupFrame) {
3334
}
3435

3536
@Override
36-
public ConnectionSetupPayload retain() {
37-
super.retain();
38-
return this;
37+
public boolean hasMetadata() {
38+
return FrameHeaderFlyweight.hasMetadata(setupFrame);
3939
}
4040

4141
@Override
42-
public ConnectionSetupPayload retain(int increment) {
43-
super.retain(increment);
44-
return this;
42+
public ByteBuf sliceMetadata() {
43+
return SetupFrameFlyweight.metadata(setupFrame);
4544
}
4645

4746
@Override
48-
public boolean hasMetadata() {
49-
return FrameHeaderFlyweight.hasMetadata(setupFrame);
47+
public ByteBuf sliceData() {
48+
return SetupFrameFlyweight.data(setupFrame);
5049
}
5150

5251
@Override
53-
public int keepAliveInterval() {
54-
return SetupFrameFlyweight.keepAliveInterval(setupFrame);
52+
public ByteBuf data() {
53+
return sliceData();
5554
}
5655

5756
@Override
58-
public int keepAliveMaxLifetime() {
59-
return SetupFrameFlyweight.keepAliveMaxLifetime(setupFrame);
57+
public ByteBuf metadata() {
58+
return sliceMetadata();
6059
}
6160

6261
@Override
@@ -69,6 +68,16 @@ public String dataMimeType() {
6968
return SetupFrameFlyweight.dataMimeType(setupFrame);
7069
}
7170

71+
@Override
72+
public int keepAliveInterval() {
73+
return SetupFrameFlyweight.keepAliveInterval(setupFrame);
74+
}
75+
76+
@Override
77+
public int keepAliveMaxLifetime() {
78+
return SetupFrameFlyweight.keepAliveMaxLifetime(setupFrame);
79+
}
80+
7281
@Override
7382
public int getFlags() {
7483
return FrameHeaderFlyweight.flags(setupFrame);
@@ -105,24 +114,4 @@ public ConnectionSetupPayload touch(Object hint) {
105114
protected void deallocate() {
106115
setupFrame.release();
107116
}
108-
109-
@Override
110-
public ByteBuf sliceMetadata() {
111-
return SetupFrameFlyweight.metadata(setupFrame);
112-
}
113-
114-
@Override
115-
public ByteBuf sliceData() {
116-
return SetupFrameFlyweight.data(setupFrame);
117-
}
118-
119-
@Override
120-
public ByteBuf data() {
121-
return sliceData();
122-
}
123-
124-
@Override
125-
public ByteBuf metadata() {
126-
return sliceMetadata();
127-
}
128117
}

0 commit comments

Comments
 (0)