Skip to content

Commit ce5098d

Browse files
committed
[broker-14] improve ActionResult computing
1 parent 7bfbd70 commit ce5098d

File tree

9 files changed

+65
-16
lines changed

9 files changed

+65
-16
lines changed

src/main/java/com/ss/mqtt/broker/handler/publish/in/AbstractPublishInHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void handle(@NotNull MqttClient client, @NotNull PublishInPacket packet)
2525
handleResult(client, packet, result);
2626
}
2727

28-
private boolean publish(
28+
private @NotNull ActionResult publish(
2929
@NotNull Subscriber subscriber,
3030
@NotNull PublishInPacket packet
3131
) {

src/main/java/com/ss/mqtt/broker/handler/publish/out/PublishOutHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ss.mqtt.broker.handler.publish.out;
22

3+
import com.ss.mqtt.broker.model.ActionResult;
34
import com.ss.mqtt.broker.model.Subscriber;
45
import com.ss.mqtt.broker.network.packet.in.PublishInPacket;
56
import org.jetbrains.annotations.NotNull;
@@ -9,5 +10,5 @@
910
*/
1011
public interface PublishOutHandler {
1112

12-
boolean handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber);
13+
@NotNull ActionResult handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber);
1314
}

src/main/java/com/ss/mqtt/broker/handler/publish/out/Qos0PublishOutHandler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.ss.mqtt.broker.handler.publish.out;
22

3+
import static com.ss.mqtt.broker.model.ActionResult.SUCCESS;
4+
import com.ss.mqtt.broker.model.ActionResult;
35
import com.ss.mqtt.broker.model.MqttPropertyConstants;
46
import com.ss.mqtt.broker.model.QoS;
57
import com.ss.mqtt.broker.model.Subscriber;
@@ -9,7 +11,7 @@
911
public class Qos0PublishOutHandler extends AbstractPublishOutHandler {
1012

1113
@Override
12-
public boolean handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber) {
14+
public @NotNull ActionResult handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber) {
1315

1416
var client = subscriber.getMqttClient();
1517
var packetOutFactory = client.getPacketOutFactory();
@@ -28,6 +30,6 @@ public boolean handle(@NotNull PublishInPacket packet, @NotNull Subscriber subsc
2830
packet.getCorrelationData(),
2931
packet.getUserProperties()
3032
));
31-
return true;
33+
return SUCCESS;
3234
}
3335
}

src/main/java/com/ss/mqtt/broker/handler/publish/out/Qos1PublishOutHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.ss.mqtt.broker.handler.publish.out;
22

3+
import static com.ss.mqtt.broker.model.ActionResult.EMPTY;
4+
import static com.ss.mqtt.broker.model.ActionResult.SUCCESS;
35
import com.ss.mqtt.broker.model.*;
46
import com.ss.mqtt.broker.network.client.MqttClient;
57
import com.ss.mqtt.broker.network.packet.HasPacketId;
@@ -11,14 +13,14 @@
1113
public class Qos1PublishOutHandler extends AbstractPublishOutHandler implements MqttSession.PendingPacketHandler {
1214

1315
@Override
14-
public boolean handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber) {
16+
public @NotNull ActionResult handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber) {
1517

1618
var client = subscriber.getMqttClient();
1719
var session = client.getSession();
1820

1921
// it means this client was already closed
2022
if (session == null) {
21-
return false;
23+
return EMPTY;
2224
}
2325

2426
var packetId = session.nextPacketId();
@@ -39,7 +41,7 @@ public boolean handle(@NotNull PublishInPacket packet, @NotNull Subscriber subsc
3941
packet.getCorrelationData(),
4042
packet.getUserProperties()
4143
));
42-
return true;
44+
return SUCCESS;
4345
}
4446

4547
@Override

src/main/java/com/ss/mqtt/broker/handler/publish/out/Qos2PublishOutHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ss.mqtt.broker.handler.publish.out;
22

3+
import com.ss.mqtt.broker.model.ActionResult;
34
import com.ss.mqtt.broker.model.Subscriber;
45
import com.ss.mqtt.broker.network.packet.in.PublishInPacket;
56
import lombok.RequiredArgsConstructor;
@@ -9,7 +10,7 @@
910
public class Qos2PublishOutHandler extends AbstractPublishOutHandler {
1011

1112
@Override
12-
public boolean handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber) {
13+
public @NotNull ActionResult handle(@NotNull PublishInPacket packet, @NotNull Subscriber subscriber) {
1314
throw new UnsupportedOperationException();
1415
}
1516
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
package com.ss.mqtt.broker.model;
22

3+
import org.jetbrains.annotations.NotNull;
4+
35
public enum ActionResult {
46

57
SUCCESS,
68
FAILED,
79
EMPTY;
810

11+
public @NotNull ActionResult and(@NotNull ActionResult another) {
12+
if (this == FAILED || another == FAILED) {
13+
return FAILED;
14+
} else if (this == SUCCESS || another == SUCCESS) {
15+
return SUCCESS;
16+
} else {
17+
return EMPTY;
18+
}
19+
}
920
}

src/main/java/com/ss/mqtt/broker/service/SubscriptionService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.ss.mqtt.broker.model.topic.TopicFilter;
77
import com.ss.mqtt.broker.model.topic.TopicName;
88
import com.ss.mqtt.broker.network.client.MqttClient;
9+
import com.ss.rlib.common.function.NotNullBiFunction;
910
import com.ss.rlib.common.function.NotNullNullableBiFunction;
1011
import com.ss.rlib.common.util.array.Array;
1112
import org.jetbrains.annotations.NotNull;
@@ -26,7 +27,7 @@ public interface SubscriptionService {
2627
@NotNull <A> ActionResult forEachTopicSubscriber(
2728
@NotNull TopicName topicName,
2829
@NotNull A argument,
29-
@NotNull NotNullNullableBiFunction<Subscriber, A, Boolean> action
30+
@NotNull NotNullBiFunction<Subscriber, A, ActionResult> action
3031
);
3132

3233
/**

src/main/java/com/ss/mqtt/broker/service/impl/SimpleSubscriptionService.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.ss.mqtt.broker.service.impl;
22

3-
import static com.ss.mqtt.broker.model.ActionResult.*;
3+
import static com.ss.mqtt.broker.model.ActionResult.EMPTY;
44
import com.ss.mqtt.broker.model.ActionResult;
55
import com.ss.mqtt.broker.model.MqttSession;
66
import com.ss.mqtt.broker.model.SubscribeTopicFilter;
@@ -12,7 +12,7 @@
1212
import com.ss.mqtt.broker.model.topic.TopicSubscribers;
1313
import com.ss.mqtt.broker.network.client.MqttClient;
1414
import com.ss.mqtt.broker.service.SubscriptionService;
15-
import com.ss.rlib.common.function.NotNullNullableBiFunction;
15+
import com.ss.rlib.common.function.NotNullBiFunction;
1616
import com.ss.rlib.common.util.array.Array;
1717
import com.ss.rlib.common.util.array.ArrayCollectors;
1818
import org.jetbrains.annotations.NotNull;
@@ -29,18 +29,17 @@ public class SimpleSubscriptionService implements SubscriptionService {
2929
public <A> @NotNull ActionResult forEachTopicSubscriber(
3030
@NotNull TopicName topicName,
3131
@NotNull A argument,
32-
@NotNull NotNullNullableBiFunction<Subscriber, A, Boolean> action
32+
@NotNull NotNullBiFunction<Subscriber, A, ActionResult> action
3333
) {
3434
var subscribers = topicSubscribers.matches(topicName);
3535
if (subscribers.isEmpty()) {
3636
return EMPTY;
3737
}
38-
boolean result = true;
38+
ActionResult result = EMPTY;
3939
for (var subscriber : subscribers) {
40-
//noinspection ConstantConditions
41-
result = result && action.apply(subscriber, argument);
40+
result = result.and(action.apply(subscriber, argument));
4241
}
43-
return result ? SUCCESS : FAILED;
42+
return result;
4443
}
4544

4645
@Override
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.ss.mqtt.broker.test.model
2+
3+
import com.ss.mqtt.broker.model.ActionResult
4+
import com.ss.mqtt.broker.test.network.NetworkUnitSpecification
5+
import spock.lang.Unroll
6+
7+
import static com.ss.mqtt.broker.model.ActionResult.*
8+
9+
class ActionResultTest extends NetworkUnitSpecification {
10+
11+
@Unroll
12+
def "#first and #second == #result"(
13+
ActionResult first,
14+
ActionResult second,
15+
ActionResult result
16+
) {
17+
expect:
18+
first.and(second) == result
19+
where:
20+
first | second | result
21+
SUCCESS | SUCCESS | SUCCESS
22+
SUCCESS | FAILED | FAILED
23+
FAILED | SUCCESS | FAILED
24+
FAILED | FAILED | FAILED
25+
EMPTY | EMPTY | EMPTY
26+
EMPTY | FAILED | FAILED
27+
FAILED | EMPTY | FAILED
28+
SUCCESS | EMPTY | SUCCESS
29+
EMPTY | SUCCESS | SUCCESS
30+
}
31+
32+
}

0 commit comments

Comments
 (0)