Implement message caching (Only send LOGS packet to server when the LOGS_SIZE returned by server is different from cached one)

This commit is contained in:
pixtaded 2025-01-12 02:05:34 +03:00
parent bdf7e6bbae
commit 57b20f69cd
3 changed files with 17 additions and 4 deletions

View File

@ -18,6 +18,7 @@ public class CrabClient implements Crab {
private BufferedReader in; private BufferedReader in;
private int lastBufferLength = 0; private int lastBufferLength = 0;
private String nickname; private String nickname;
private Logs cache = new Logs(0, "");
public CrabClient() { public CrabClient() {
this.nickname = ""; this.nickname = "";
@ -111,9 +112,12 @@ public class CrabClient implements Crab {
int response = in.read(buffer); int response = in.read(buffer);
lastBufferLength = Integer.parseInt(new String(buffer).trim()); lastBufferLength = Integer.parseInt(new String(buffer).trim());
} case LOGS -> { } case LOGS -> {
if (cache.sizeInBytes() != lastBufferLength) {
byte[] bytes = socket.getInputStream().readNBytes(lastBufferLength); byte[] bytes = socket.getInputStream().readNBytes(lastBufferLength);
System.out.print("\033[H\033[2J"); cache = new Logs(lastBufferLength, new String(bytes, StandardCharsets.UTF_8));
System.out.print(Sanitizer.sanitizeString(new String(bytes, StandardCharsets.UTF_8), false)); }
clearScreen();
System.out.print(Sanitizer.sanitizeString(cache.content(), false));
} default -> { } default -> {
} }
} }
@ -135,4 +139,9 @@ public class CrabClient implements Crab {
sendPacket(LOGS_SIZE, ""); sendPacket(LOGS_SIZE, "");
sendPacket(LOGS, ""); sendPacket(LOGS, "");
} }
private void clearScreen() {
System.out.print("\033[H\033[2J");
}
} }

View File

@ -0,0 +1,4 @@
package net.pixtaded.crab.client;
public record Logs(int sizeInBytes, String content) {
}

View File

@ -12,7 +12,7 @@ public class CrabServer implements Crab {
private Socket socket; private Socket socket;
private boolean isStopped = false; private boolean isStopped = false;
private int port; private int port;
private Database db; private final Database db;
public CrabServer() { public CrabServer() {
this.db = new Database("data.db"); this.db = new Database("data.db");