Skip to content

Commit 7c725c6

Browse files
committed
continue working on id based packets part
1 parent 080e325 commit 7c725c6

8 files changed

Lines changed: 151 additions & 33 deletions

File tree

rlib-network/src/main/java/com/ss/rlib/network/NetworkFactory.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,21 @@ public final class NetworkFactory {
7676
);
7777
}
7878

79+
/**
80+
* Create id based packet default asynchronous client network.
81+
*
82+
* @param packetRegistry the readable packet registry.
83+
* @return the server network.
84+
*/
85+
public static @NotNull ClientNetwork<DefaultConnection> newDefaultClientNetwork(
86+
@NotNull ReadablePacketRegistry<DefaultReadablePacket> packetRegistry
87+
) {
88+
return newDefaultClientNetwork(
89+
NetworkConfig.DEFAULT_CLIENT,
90+
new DefaultBufferAllocator(NetworkConfig.DEFAULT_CLIENT),
91+
packetRegistry
92+
);
93+
}
7994
/**
8095
* Create id based packet default asynchronous client network.
8196
*
@@ -141,6 +156,21 @@ public final class NetworkFactory {
141156
);
142157
}
143158

159+
/**
160+
* Create id based packet default asynchronous server network.
161+
*
162+
* @param packetRegistry the readable packet registry.
163+
* @return the server network.
164+
*/
165+
public static @NotNull ServerNetwork<DefaultConnection> newDefaultServerNetwork(
166+
@NotNull ReadablePacketRegistry<DefaultReadablePacket> packetRegistry
167+
) {
168+
return newDefaultServerNetwork(
169+
ServerNetworkConfig.DEFAULT_SERVER,
170+
new DefaultBufferAllocator(ServerNetworkConfig.DEFAULT_SERVER),
171+
packetRegistry
172+
);
173+
}
144174
/**
145175
* Create id based packet default asynchronous server network.
146176
*
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.ss.rlib.network.packet.impl;
22

3+
import com.ss.rlib.network.Connection;
34
import com.ss.rlib.network.packet.IdBasedReadablePacket;
45

56
/**
67
* @author JavaSaBr
78
*/
8-
public abstract class AbstractIdBasedReadablePacket<S extends AbstractIdBasedReadablePacket<S>> extends
9-
AbstractReadablePacket implements IdBasedReadablePacket<S> {
9+
public abstract class AbstractIdBasedReadablePacket<C extends Connection<?, ?>, S extends AbstractIdBasedReadablePacket<C, S>> extends
10+
AbstractReadablePacket<C> implements IdBasedReadablePacket<S> {
1011
}

rlib-network/src/main/java/com/ss/rlib/network/packet/impl/AbstractPacketReader.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.jetbrains.annotations.NotNull;
1515
import org.jetbrains.annotations.Nullable;
1616

17-
import java.nio.BufferOverflowException;
1817
import java.nio.ByteBuffer;
1918
import java.nio.channels.AsynchronousSocketChannel;
2019
import java.nio.channels.CompletionHandler;

rlib-network/src/main/java/com/ss/rlib/network/packet/impl/AbstractReadablePacket.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ss.rlib.network.packet.impl;
22

3+
import com.ss.rlib.common.util.ClassUtils;
34
import com.ss.rlib.network.Connection;
45
import com.ss.rlib.network.packet.ReadablePacket;
56
import com.ss.rlib.common.util.Utils;
@@ -15,14 +16,14 @@
1516
* @author JavaSaBr
1617
*/
1718
@NoArgsConstructor(access = AccessLevel.PROTECTED)
18-
public abstract class AbstractReadablePacket extends AbstractPacket implements ReadablePacket {
19+
public abstract class AbstractReadablePacket<C extends Connection<?, ?>> extends AbstractPacket implements ReadablePacket {
1920

2021
@Override
2122
public boolean read(@NotNull Connection<?, ?> connection, @NotNull ByteBuffer buffer, int length) {
2223
var oldLimit = buffer.limit();
2324
try {
2425
buffer.limit(buffer.position() + length);
25-
readImpl(connection, buffer);
26+
readImpl(ClassUtils.unsafeNNCast(connection), buffer);
2627
return true;
2728
} catch (Exception e) {
2829
handleException(buffer, e);
@@ -38,7 +39,7 @@ public boolean read(@NotNull Connection<?, ?> connection, @NotNull ByteBuffer bu
3839
* @param connection the network connection.
3940
* @param buffer the buffer with received data.
4041
*/
41-
protected void readImpl(@NotNull Connection<?, ?> connection, @NotNull ByteBuffer buffer) {
42+
protected void readImpl(@NotNull C connection, @NotNull ByteBuffer buffer) {
4243
}
4344

4445
/**
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.ss.rlib.network.packet.impl;
22

3+
import com.ss.rlib.network.impl.DefaultConnection;
4+
35
/**
46
* @author JavaSaBr
57
*/
6-
public class DefaultReadablePacket extends AbstractIdBasedReadablePacket<DefaultReadablePacket> {
8+
public class DefaultReadablePacket extends AbstractIdBasedReadablePacket<DefaultConnection, DefaultReadablePacket> {
9+
10+
711
}

rlib-network/src/main/java/com/ss/rlib/network/packet/impl/StringReadablePacket.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
package com.ss.rlib.network.packet.impl;
22

3-
import com.ss.rlib.network.Connection;
3+
import com.ss.rlib.network.impl.StringDataConnection;
44
import lombok.Getter;
55
import org.jetbrains.annotations.NotNull;
66
import org.jetbrains.annotations.Nullable;
77

88
import java.nio.ByteBuffer;
99

1010
@Getter(onMethod_ = @Nullable)
11-
public class StringReadablePacket extends AbstractReadablePacket {
11+
public class StringReadablePacket extends AbstractReadablePacket<StringDataConnection> {
1212

1313
/**
1414
* Read data.
1515
*/
1616
private volatile String data;
1717

1818
@Override
19-
protected void readImpl(@NotNull Connection<?, ?> connection, @NotNull ByteBuffer buffer) {
19+
protected void readImpl(@NotNull StringDataConnection connection, @NotNull ByteBuffer buffer) {
2020
this.data = readString(buffer);
2121
}
2222

rlib-network/src/test/java/com/ss/rlib/network/test/DefaultNetworkTest.java

Lines changed: 99 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.ss.rlib.network.test;
22

3-
import static com.ss.rlib.network.NetworkFactory.newStringDataClientNetwork;
4-
import static com.ss.rlib.network.NetworkFactory.newStringDataServerNetwork;
3+
import static com.ss.rlib.network.NetworkFactory.*;
54
import static com.ss.rlib.network.ServerNetworkConfig.DEFAULT_SERVER;
65
import static java.util.stream.Collectors.toList;
76
import com.ss.rlib.common.concurrent.atomic.AtomicInteger;
@@ -16,18 +15,23 @@
1615
import com.ss.rlib.network.annotation.PacketDescription;
1716
import com.ss.rlib.network.client.ClientNetwork;
1817
import com.ss.rlib.network.impl.DefaultBufferAllocator;
18+
import com.ss.rlib.network.impl.DefaultConnection;
1919
import com.ss.rlib.network.impl.ReuseBufferAllocator;
20+
import com.ss.rlib.network.packet.impl.DefaultReadablePacket;
2021
import com.ss.rlib.network.packet.impl.DefaultWritablePacket;
2122
import com.ss.rlib.network.packet.impl.StringWritablePacket;
23+
import com.ss.rlib.network.packet.registry.ReadablePacketRegistry;
24+
import lombok.Getter;
2225
import lombok.RequiredArgsConstructor;
2326
import lombok.SneakyThrows;
27+
import lombok.ToString;
2428
import org.jetbrains.annotations.NotNull;
2529
import org.junit.jupiter.api.Assertions;
2630
import org.junit.jupiter.api.Test;
2731
import reactor.core.publisher.Flux;
2832

2933
import java.nio.ByteBuffer;
30-
import java.time.Duration;
34+
import java.time.*;
3135
import java.util.Objects;
3236
import java.util.concurrent.CountDownLatch;
3337
import java.util.concurrent.ThreadLocalRandom;
@@ -48,7 +52,7 @@ interface ClientPackets {
4852

4953
@RequiredArgsConstructor
5054
@PacketDescription(id = 1)
51-
class GetEchoMessage extends DefaultWritablePacket {
55+
class RequestEchoMessage extends DefaultWritablePacket {
5256

5357
private final String message;
5458

@@ -60,48 +64,125 @@ protected void writeImpl(@NotNull ByteBuffer buffer) {
6064
}
6165

6266
@PacketDescription(id = 2)
63-
class GetActiveConnections extends DefaultWritablePacket {
67+
class RequestServerTime extends DefaultWritablePacket {
6468
}
6569

70+
@ToString
6671
@RequiredArgsConstructor
6772
@PacketDescription(id = 3)
68-
class BroadcastMessage extends DefaultWritablePacket {
73+
class ResponseEchoMessage extends DefaultReadablePacket {
74+
75+
@Getter
76+
private volatile String message;
77+
78+
@Override
79+
protected void readImpl(@NotNull DefaultConnection connection, @NotNull ByteBuffer buffer) {
80+
super.readImpl(connection, buffer);
81+
message = readString(buffer);
82+
}
83+
}
84+
85+
@ToString
86+
@PacketDescription(id = 4)
87+
class ResponseServerTime extends DefaultReadablePacket {
88+
89+
@Getter
90+
private volatile LocalDateTime localDateTime;
91+
92+
@Override
93+
protected void readImpl(@NotNull DefaultConnection connection, @NotNull ByteBuffer buffer) {
94+
super.readImpl(connection, buffer);
95+
localDateTime = LocalDateTime.ofEpochSecond(
96+
readLong(buffer),
97+
0,
98+
ZoneOffset.ofTotalSeconds(readInt(buffer))
99+
);
100+
}
101+
}
102+
}
103+
104+
// server packets
105+
interface ServerPackets {
106+
107+
@ToString
108+
@PacketDescription(id = 1)
109+
class RequestEchoMessage extends DefaultReadablePacket {
110+
111+
@Override
112+
protected void readImpl(@NotNull DefaultConnection connection, @NotNull ByteBuffer buffer) {
113+
super.readImpl(connection, buffer);
114+
connection.send(new ResponseEchoMessage(readString(buffer)));
115+
}
116+
}
117+
118+
@ToString
119+
@PacketDescription(id = 2)
120+
class RequestServerTime extends DefaultReadablePacket {
121+
122+
@Override
123+
protected void readImpl(@NotNull DefaultConnection connection, @NotNull ByteBuffer buffer) {
124+
super.readImpl(connection, buffer);
125+
connection.send(new ResponseServerTime());
126+
}
127+
}
128+
129+
@RequiredArgsConstructor
130+
@PacketDescription(id = 3)
131+
class ResponseEchoMessage extends DefaultWritablePacket {
69132

70133
private final String message;
71134

72135
@Override
73136
protected void writeImpl(@NotNull ByteBuffer buffer) {
74137
super.writeImpl(buffer);
75-
writeString(buffer, message);
138+
writeString(buffer, "Echo: " + message);
76139
}
77140
}
78-
}
79141

80-
// server packets
142+
@PacketDescription(id = 4)
143+
class ResponseServerTime extends DefaultWritablePacket {
144+
145+
@Override
146+
protected void writeImpl(@NotNull ByteBuffer buffer) {
147+
super.writeImpl(buffer);
148+
var dateTime = ZonedDateTime.now();
149+
writeLong(buffer, dateTime.toEpochSecond());
150+
writeInt(buffer, dateTime.getOffset().getTotalSeconds());
151+
}
152+
}
153+
}
81154

82155
@Test
83156
@SneakyThrows
84157
void echoNetworkTest() {
85158

86-
var serverNetwork = newStringDataServerNetwork();
159+
var serverNetwork = newDefaultServerNetwork(ReadablePacketRegistry.of(DefaultReadablePacket.class,
160+
ServerPackets.RequestEchoMessage.class,
161+
ServerPackets.RequestServerTime.class
162+
));
87163
var serverAddress = serverNetwork.start();
88164
var counter = new CountDownLatch(90);
89165

90166
serverNetwork.accepted()
91167
.flatMap(Connection::receivedEvents)
92-
.subscribe(event -> {
93-
var message = event.packet.getData();
94-
LOGGER.info("Received from client: " + message);
95-
event.connection.send(new StringWritablePacket("Echo: " + message));
96-
});
168+
.subscribe(event -> LOGGER.info("Received from client: " + event.packet));
97169

98-
var clientNetwork = newStringDataClientNetwork();
170+
var clientNetwork = newDefaultClientNetwork(ReadablePacketRegistry.of(DefaultReadablePacket.class,
171+
ClientPackets.ResponseEchoMessage.class,
172+
ClientPackets.ResponseServerTime.class
173+
));
99174
clientNetwork.connected(serverAddress)
100175
.doOnNext(connection -> IntStream.range(10, 100)
101-
.forEach(length -> connection.send(new StringWritablePacket(StringUtils.generate(length)))))
176+
.forEach(length -> {
177+
if(length % 2 == 0) {
178+
connection.send(new ClientPackets.RequestServerTime());
179+
} else {
180+
connection.send(new ClientPackets.RequestEchoMessage(StringUtils.generate(length)));
181+
}
182+
}))
102183
.flatMapMany(Connection::receivedEvents)
103184
.subscribe(event -> {
104-
LOGGER.info("Received from server: " + event.packet.getData());
185+
LOGGER.info("Received from server: " + event.packet);
105186
counter.countDown();
106187
});
107188

rlib-network/src/test/java/com/ss/rlib/network/test/IdBasedReadablePacketRegistryTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import com.ss.rlib.common.util.array.Array;
55
import com.ss.rlib.common.util.array.ArrayFactory;
66
import com.ss.rlib.network.annotation.PacketDescription;
7+
import com.ss.rlib.network.impl.DefaultConnection;
78
import com.ss.rlib.network.packet.IdBasedReadablePacket;
89
import com.ss.rlib.network.packet.impl.AbstractIdBasedReadablePacket;
10+
import com.ss.rlib.network.packet.impl.DefaultReadablePacket;
911
import com.ss.rlib.network.packet.registry.impl.IdBasedReadablePacketRegistry;
1012
import lombok.NoArgsConstructor;
1113
import org.junit.jupiter.api.Assertions;
@@ -15,21 +17,21 @@ public class IdBasedReadablePacketRegistryTest {
1517

1618
@NoArgsConstructor
1719
@PacketDescription(id = 1)
18-
public static class Impl1 extends AbstractIdBasedReadablePacket<Impl1> {
20+
public static class Impl1 extends DefaultReadablePacket {
1921
}
2022

2123
@NoArgsConstructor
2224
@PacketDescription(id = 2)
23-
public static class Impl2 extends AbstractIdBasedReadablePacket<Impl2> {
25+
public static class Impl2 extends DefaultReadablePacket {
2426
}
2527

2628
@NoArgsConstructor
2729
@PacketDescription(id = 3)
28-
public static class Impl3 extends AbstractIdBasedReadablePacket<Impl3> {
30+
public static class Impl3 extends DefaultReadablePacket {
2931
}
3032

3133
@NoArgsConstructor
32-
private static class PrivateBase extends AbstractIdBasedReadablePacket<PrivateBase> {
34+
private static class PrivateBase extends AbstractIdBasedReadablePacket<DefaultConnection, PrivateBase> {
3335
}
3436

3537
@NoArgsConstructor
@@ -43,7 +45,7 @@ private static class PrivateImpl2 extends PrivateBase {
4345
}
4446

4547
@NoArgsConstructor
46-
public static class PublicBase extends AbstractIdBasedReadablePacket<PublicBase> {
48+
public static class PublicBase extends AbstractIdBasedReadablePacket<DefaultConnection, PublicBase> {
4749
}
4850

4951
@NoArgsConstructor

0 commit comments

Comments
 (0)