gradle/wrapper | ||
src | ||
.gitignore | ||
build.gradle | ||
gradlew | ||
gradlew.bat | ||
LICENSE | ||
README.md | ||
settings.gradle |
Sew'y [səʊi]
What is it?
The lightweight network library providing client-server communications that could be described with commands.
Why another network library?
- other protocol-based network libraries are old (in e. kryonet)
- or they are heavy and very overloaded
How to use?
Simple ECHO server
- Describe ECHOed client listener
380dd5f8b0/src/test/java/me/bvn13/sewy/EchoClientListener.java (L24-L40)
- Create Server
new Server("192.168.0.153", port, EchoClientListener.class);
- Create Client to communicate with server
Client<SimpleClientListener> client = new Client<>("192.168.0.153", port, SimpleClientListener.class);
- Send raw data and read the response
client.writeLine("hello");
String response1 = client.readLine();
Assertions.assertEquals("hello", response1);
Command-based client listener
- Implement commands inheriting from
AbstractCommand
- Register all commands as white listed
Sewy.register(PingCommand.class);
Sewy.register(PongCommand.class);
- Start server with
CommandClientListener
implementing response creation logic
CommandServer server = new CommandServer("localhost", port, (socket) -> new CommandClientListener(socket) {
@Override
public AbstractCommand onCommand(AbstractCommand command) {
if (command instanceof PingCommand) {
return new PongCommand((PingCommand) command);
}
throw new IllegalArgumentException(command.toString());
}
});
- Start client to send commands to server
AtomicLong latency = new AtomicLong(0);
CommandClient client = new CommandClient("localhost", port, (socket) -> new CommandClientListener(socket) {
@Override
public AbstractCommand onCommand(AbstractCommand command) {
if (command instanceof PongCommand) {
latency.set(((PongCommand)command).getLatency());
return null;
} else {
throw new IllegalArgumentException(command.toString());
}
}
});
client.send(new PingCommand());
Thread.sleep(1000);
Assertions.assertTrue(latency.get() > 0);