added timer task for ack message handling
parent
64000b23b7
commit
9ae2c47057
|
@ -3,10 +3,9 @@ package earth.krakatao;
|
|||
import earth.krakatao.events.KraSocketClientEventInitiater;
|
||||
import earth.krakatao.events.KraSocketClientEventInterface;
|
||||
import earth.krakatao.protocol.KraSocketClientProtocol;
|
||||
import earth.krakatao.protocol.KraSocketClientProtocolMessage;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
import lombok.Getter;
|
||||
|
||||
|
@ -22,7 +21,8 @@ public class KraSocketClient {
|
|||
|
||||
public KraSocketClient(KraSocketClientConfig kraSocketClientConfig,
|
||||
KraSocketClientEventInterface kraSocketClientEventInterface,
|
||||
KraSocketClientProtocol kraSocketClientProtocol) throws URISyntaxException {
|
||||
KraSocketClientProtocol kraSocketClientProtocol, List<Long> webSocketAckTimeouts)
|
||||
throws URISyntaxException {
|
||||
this.kraSocketClientConfig = kraSocketClientConfig;
|
||||
|
||||
this.kraSocketClientEventInitiater = new KraSocketClientEventInitiater();
|
||||
|
@ -33,6 +33,6 @@ public class KraSocketClient {
|
|||
+ this.kraSocketClientConfig.getWebSocketPort()
|
||||
+ "/ws?ak=" + this.kraSocketClientConfig.getWebSocketAccessKey()
|
||||
+ "&s=" + this.kraSocketClientConfig.getWebSocketServerName()),
|
||||
this.kraSocketClientEventInitiater, kraSocketClientProtocol);
|
||||
this.kraSocketClientEventInitiater, kraSocketClientProtocol, webSocketAckTimeouts);
|
||||
}
|
||||
}
|
|
@ -1,14 +1,16 @@
|
|||
package earth.krakatao;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class KraSocketClientConfig {
|
||||
|
||||
private final String WebSocketProtocol;
|
||||
private final String WebSocketHost;
|
||||
private final int WebSocketPort;
|
||||
private final String WebSocketAccessKey;
|
||||
private final String WebSocketServerName;
|
||||
private final String webSocketProtocol;
|
||||
private final String webSocketHost;
|
||||
private final int webSocketPort;
|
||||
private final String webSocketAccessKey;
|
||||
private final String webSocketServerName;
|
||||
private final List<Long> webSocketAckTimeouts;
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package earth.krakatao;
|
|||
|
||||
import earth.krakatao.protocol.KraSocketClientProtocolMessage;
|
||||
import java.util.TimerTask;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class KraSocketClientMessageTimerTask extends TimerTask {
|
||||
|
||||
|
@ -15,13 +14,28 @@ public class KraSocketClientMessageTimerTask extends TimerTask {
|
|||
@Override
|
||||
public void run() {
|
||||
KraSocketClient.getLogger().info(
|
||||
"MessageTimerTask is running " + this.socketClient.getKraProtocol().getConsumerHashMap()
|
||||
"MessageTimerTask is running. SendQueueMessages size: " + this.socketClient.getKraProtocol()
|
||||
.getSendQueueMessages()
|
||||
.size());
|
||||
|
||||
for (Consumer<KraSocketClientProtocolMessage> consumer : this.socketClient.getKraProtocol()
|
||||
.getConsumerHashMap().values()) {
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
|
||||
KraSocketClient.getLogger().info("consumer: " + consumer);
|
||||
for (KraSocketClientProtocolMessage msg : this.socketClient.getKraProtocol()
|
||||
.getSendQueueMessages()
|
||||
.values()) {
|
||||
if ((currentTimeMillis - msg.getTime())
|
||||
> this.socketClient.getWebSocketAckTimeouts()
|
||||
.get(msg.getTrySendCount())) {
|
||||
KraSocketClient.getLogger().info("MessageTimerTask here");
|
||||
|
||||
msg.setTime(currentTimeMillis);
|
||||
|
||||
this.socketClient.SendMessage(msg);
|
||||
|
||||
if (msg.getTrySendCount() < 4) {
|
||||
msg.setTrySendCount(msg.getTrySendCount() + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import earth.krakatao.protocol.KraSocketClientProtocolMessage;
|
|||
import earth.krakatao.protocol.KraSocketClientProtocolStatus;
|
||||
import java.net.URI;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.List;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
import lombok.Getter;
|
||||
|
@ -14,18 +15,20 @@ import org.java_websocket.handshake.ServerHandshake;
|
|||
|
||||
public class SocketClient extends WebSocketClient {
|
||||
|
||||
private final KraSocketClientEventInitiater kraSocketClientEventInitiater;
|
||||
@Getter
|
||||
private final KraSocketClientProtocol kraProtocol;
|
||||
private final KraSocketClientEventInitiater kraSocketClientEventInitiater;
|
||||
private TimerTask timerTask;
|
||||
@Getter
|
||||
private final List<Long> webSocketAckTimeouts;
|
||||
private Timer timer;
|
||||
|
||||
public SocketClient(URI serverUri, KraSocketClientEventInitiater kraSocketClientEventInitiater,
|
||||
KraSocketClientProtocol kraProtocol) {
|
||||
KraSocketClientProtocol kraProtocol, List<Long> webSocketAckTimeouts) {
|
||||
super(serverUri);
|
||||
|
||||
this.kraSocketClientEventInitiater = kraSocketClientEventInitiater;
|
||||
this.kraProtocol = kraProtocol;
|
||||
this.webSocketAckTimeouts = webSocketAckTimeouts;
|
||||
}
|
||||
|
||||
public void SendMessage(KraSocketClientProtocolMessage kraProtocolMessage) {
|
||||
|
@ -44,7 +47,7 @@ public class SocketClient extends WebSocketClient {
|
|||
this.kraSocketClientEventInitiater.callOnOpen(serverHandshake);
|
||||
KraSocketClient.getLogger().info("connection opened");
|
||||
|
||||
this.timerTask = new KraSocketClientMessageTimerTask(this);
|
||||
TimerTask timerTask = new KraSocketClientMessageTimerTask(this);
|
||||
this.timer = new Timer(true);
|
||||
this.timer.scheduleAtFixedRate(timerTask, 0, 3 * 1000);
|
||||
}
|
||||
|
@ -71,13 +74,13 @@ public class SocketClient extends WebSocketClient {
|
|||
|
||||
// response to the user that this message cmdID is already in the queue
|
||||
if (kraProtocolMessage.getStatus() == KraSocketClientProtocolStatus.GET.getStatus()
|
||||
&& this.kraProtocol.getCmdIDs().contains(kraProtocolMessage.getCmdID())) {
|
||||
&& this.kraProtocol.getSendQueueMessages().containsKey(kraProtocolMessage.getCmdID())) {
|
||||
// TODO: uuid
|
||||
kraProtocolMessage = new KraSocketClientProtocolMessage(
|
||||
KraSocketClientProtocolStatus.MESSAGE_ALREADY_IN_QUEUE.getStatus(),
|
||||
kraProtocolMessage.getStatus() == KraSocketClientProtocolStatus.GET.getStatus()
|
||||
? kraProtocolMessage.getStatus() : 0, 0,
|
||||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", (short) kraProtocolMessage.getCmdNumber(), "");
|
||||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", (short) kraProtocolMessage.getCmdNumber(), "", null);
|
||||
|
||||
KraSocketClient.getLogger()
|
||||
.info("response MESSAGE_ALREADY_IN_QUEUE " + kraProtocolMessage.getCmdID());
|
||||
|
|
|
@ -10,18 +10,22 @@ import java.util.function.Consumer;
|
|||
import lombok.Getter;
|
||||
|
||||
public class KraSocketClientProtocol {
|
||||
|
||||
@Getter
|
||||
private final ArrayList<Integer> cmdIDs;
|
||||
|
||||
//@Getter
|
||||
//private final ArrayList<Integer> cmdIDs;
|
||||
@Getter
|
||||
private int currentCmdIDIndex;
|
||||
//@Getter
|
||||
//private final HashMap<Integer, Consumer<KraSocketClientProtocolMessage>> consumerHashMap;
|
||||
|
||||
@Getter
|
||||
private final HashMap<Integer, Consumer<KraSocketClientProtocolMessage>> consumerHashMap;
|
||||
private final HashMap<Integer, KraSocketClientProtocolMessage> sendQueueMessages;
|
||||
|
||||
public KraSocketClientProtocol() {
|
||||
this.cmdIDs = new ArrayList<>();
|
||||
//this.cmdIDs = new ArrayList<>();
|
||||
this.currentCmdIDIndex = 9;
|
||||
this.consumerHashMap = new HashMap<>();
|
||||
//this.consumerHashMap = new HashMap<>();
|
||||
this.sendQueueMessages = new HashMap<>();
|
||||
}
|
||||
|
||||
public int generateCmdID() {
|
||||
|
@ -79,7 +83,7 @@ public class KraSocketClientProtocol {
|
|||
}
|
||||
}
|
||||
|
||||
this.cmdIDs.add(cmdID);
|
||||
//this.cmdIDs.add(cmdID);
|
||||
|
||||
return raw;
|
||||
}
|
||||
|
@ -125,10 +129,11 @@ public class KraSocketClientProtocol {
|
|||
+ cmdNumber + " " + args + " ");
|
||||
|
||||
return new KraSocketClientProtocolMessage(status, cmdID, dest,
|
||||
Formatter.stringToUuid(playerUuid).toString(), cmdNumber, args);
|
||||
Formatter.stringToUuid(playerUuid).toString(), cmdNumber, args, null);
|
||||
}
|
||||
|
||||
public void removeData(int cmdID) {
|
||||
/*
|
||||
Iterator<Integer> iterator = this.cmdIDs.iterator();
|
||||
|
||||
KraSocketClient.getLogger().info("before: " + this.cmdIDs);
|
||||
|
@ -140,6 +145,6 @@ public class KraSocketClientProtocol {
|
|||
}
|
||||
KraSocketClient.getLogger().info("after: " + this.cmdIDs);
|
||||
|
||||
this.consumerHashMap.remove(cmdID);
|
||||
this.consumerHashMap.remove(cmdID); */
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package earth.krakatao.protocol;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
@ -12,19 +13,21 @@ public class KraSocketClientProtocolMessage {
|
|||
private final String uuid;
|
||||
private final short cmdNumber;
|
||||
private final String args;
|
||||
private final Consumer<KraSocketClientProtocolMessage> messageConsumer;
|
||||
@Setter
|
||||
private int trySendCount;
|
||||
@Setter
|
||||
private long time;
|
||||
|
||||
public KraSocketClientProtocolMessage(byte status, int cmdID, int dest, String uuid,
|
||||
short cmdNumber, String args) {
|
||||
short cmdNumber, String args, Consumer<KraSocketClientProtocolMessage> messageConsumer) {
|
||||
this.status = status;
|
||||
this.cmdID = cmdID;
|
||||
this.dest = dest;
|
||||
this.uuid = uuid;
|
||||
this.cmdNumber = cmdNumber;
|
||||
this.args = args;
|
||||
this.messageConsumer = messageConsumer;
|
||||
|
||||
this.trySendCount = 0;
|
||||
this.time = System.currentTimeMillis();
|
||||
|
|
Loading…
Reference in New Issue