1
1
package com .github .rxrav .redislite .core .cmd ;
2
2
3
+ import com .github .rxrav .redislite .core .Memory ;
3
4
import com .github .rxrav .redislite .core .cmd .impl .*;
4
5
import com .github .rxrav .redislite .core .error .UnknownCommandError ;
5
6
import com .github .rxrav .redislite .core .ser .Resp2Deserializer ;
6
7
import com .github .rxrav .redislite .core .ser .Resp2Serializer ;
7
- import com .github .rxrav .redislite .server .RedisLiteServer ;
8
8
9
9
import java .net .SocketException ;
10
10
import java .util .ArrayList ;
15
15
public class CommandHandler {
16
16
private final Resp2Serializer serializer ;
17
17
private final Resp2Deserializer deserializer ;
18
- public CommandHandler (Resp2Serializer serializer , Resp2Deserializer deserializer ) {
18
+ private final Memory memoryRef ;
19
+ public CommandHandler (Resp2Serializer serializer , Resp2Deserializer deserializer , Memory memoryRef ) {
19
20
this .serializer = serializer ;
20
21
this .deserializer = deserializer ;
22
+ this .memoryRef = memoryRef ;
21
23
}
22
24
public String handleCommand (String command ) throws SocketException {
23
25
char firstByte = command .charAt (0 );
@@ -28,36 +30,36 @@ public String handleCommand(String command) throws SocketException {
28
30
Object [] deserializedArray = deserializer .deserializeArray (command );
29
31
return switch (deserializedArray [0 ].toString ().toUpperCase ()) {
30
32
case "EXIT" -> throw new SocketException ("Disconnecting client" );
31
- case "PING" -> serializer .serialize (String .valueOf (new Ping ().builder (deserializedArray ).handle ()), false );
32
- case "ECHO" -> serializer .serialize (String .valueOf (new Echo ().builder (deserializedArray ).handle ()), true );
33
+ case "PING" -> serializer .serialize (String .valueOf (new Ping ().builder (deserializedArray ).handle (null )), false );
34
+ case "ECHO" -> serializer .serialize (String .valueOf (new Echo ().builder (deserializedArray ).handle (null )), true );
33
35
case "SET" -> {
34
- Object resp = new Set ().builder (deserializedArray ).handle ();
36
+ Object resp = new Set ().builder (deserializedArray ).handle (memoryRef );
35
37
if (resp == null ) yield serializer .serialize (null , true );
36
38
else yield serializer .serialize (String .valueOf (resp ), false );
37
39
}
38
40
case "GET" -> {
39
- Object resp = new Get ().builder (deserializedArray ).handle ();
41
+ Object resp = new Get ().builder (deserializedArray ).handle (memoryRef );
40
42
if (resp == null ) yield serializer .serialize (null , true );
41
43
if (resp instanceof Integer ) yield serializer .serialize ((int ) resp );
42
44
else yield serializer .serialize (String .valueOf (resp ), true );
43
45
}
44
- case "EXISTS" -> serializer .serialize ((int ) new Exists ().builder (deserializedArray ).handle ());
45
- case "DEL" -> serializer .serialize ((int ) new Del ().builder (deserializedArray ).handle ());
46
- case "INCR" -> serializer .serialize ((int ) new Incr ().builder (deserializedArray ).handle ());
47
- case "DECR" -> serializer .serialize ((int ) new Decr ().builder (deserializedArray ).handle ());
48
- case "LPUSH" -> serializer .serialize ((int ) new Lpush ().builder (deserializedArray ).handle ());
46
+ case "EXISTS" -> serializer .serialize ((int ) new Exists ().builder (deserializedArray ).handle (memoryRef ));
47
+ case "DEL" -> serializer .serialize ((int ) new Del ().builder (deserializedArray ).handle (memoryRef ));
48
+ case "INCR" -> serializer .serialize ((int ) new Incr ().builder (deserializedArray ).handle (memoryRef ));
49
+ case "DECR" -> serializer .serialize ((int ) new Decr ().builder (deserializedArray ).handle (memoryRef ));
50
+ case "LPUSH" -> serializer .serialize ((int ) new Lpush ().builder (deserializedArray ).handle (memoryRef ));
49
51
case "LRANGE" -> {
50
- Object obj = new Lrange ().builder (deserializedArray ).handle ();
52
+ Object obj = new Lrange ().builder (deserializedArray ).handle (memoryRef );
51
53
List <String > list = ((ArrayList <?>) obj ).stream ().map (String ::valueOf ).toList ();
52
54
String [] arr = new String [list .size ()];
53
55
for (int i = 0 ; i < arr .length ; i ++) {
54
56
arr [i ] = list .get (i );
55
57
}
56
58
yield serializer .serialize (arr );
57
59
}
58
- case "RPUSH" -> serializer .serialize ((int ) new Rpush ().builder (deserializedArray ).handle ());
59
- case "FLUSHALL" -> serializer .serialize (String .valueOf (new FlushAll ().builder (deserializedArray ).handle ()), false );
60
- case "SAVE" -> serializer .serialize (String .valueOf (new Save ().builder (deserializedArray ).handle ()), false );
60
+ case "RPUSH" -> serializer .serialize ((int ) new Rpush ().builder (deserializedArray ).handle (memoryRef ));
61
+ case "FLUSHALL" -> serializer .serialize (String .valueOf (new FlushAll ().builder (deserializedArray ).handle (memoryRef )), false );
62
+ case "SAVE" -> serializer .serialize (String .valueOf (new Save ().builder (deserializedArray ).handle (memoryRef )), false );
61
63
default -> throw new UnknownCommandError ("unknown command" );
62
64
};
63
65
} catch (RuntimeException e ) {
0 commit comments