readme
This commit is contained in:
parent
380dd5f8b0
commit
be4c26fe73
84
README.md
Normal file
84
README.md
Normal file
@ -0,0 +1,84 @@
|
||||
# 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?
|
||||
|
||||
1. other protocol-based network libraries are old (in e. [kryonet](https://github.com/EsotericSoftware/kryonet))
|
||||
2. or they are heavy and very overloaded
|
||||
|
||||
## How to use?
|
||||
|
||||
### Simple ECHO server
|
||||
|
||||
1. Describe ECHOed client listener
|
||||
|
||||
https://github.com/bvn13/sewy/blob/380dd5f8b0757791f583852c1e1516c9470baf42/src/test/java/me/bvn13/sewy/EchoClientListener.java#L24-L40
|
||||
|
||||
2. Create Server
|
||||
|
||||
```java
|
||||
new Server("192.168.0.153", port, EchoClientListener.class);
|
||||
|
||||
```
|
||||
|
||||
3. Create client to communicate with server
|
||||
|
||||
```java
|
||||
Client<SimpleClientListener> client = new Client<>("192.168.0.153", port, SimpleClientListener.class);
|
||||
```
|
||||
|
||||
4. Send raw data and read the response
|
||||
|
||||
```java
|
||||
client.writeLine("hello");
|
||||
String response1 = client.readLine();
|
||||
Assertions.assertEquals("hello", response1);
|
||||
```
|
||||
|
||||
### Command-based client listener
|
||||
|
||||
1. Implement commands inheriting from `AbstractCommand`
|
||||
2. Register all commands as white listed
|
||||
|
||||
```java
|
||||
Sewy.register(PingCommand.class);
|
||||
Sewy.register(PongCommand.class);
|
||||
```
|
||||
|
||||
3. Start server with `CommandClientListener` implementing response creation logic
|
||||
|
||||
```java
|
||||
Server server = new Server("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());
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
4. Start client to send commands to server
|
||||
|
||||
```java
|
||||
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);
|
||||
|
||||
```
|
Loading…
Reference in New Issue
Block a user