mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-26 00:38:05 +01:00
Handle pubsub callbacks from a cached thread pool.
...implement some belt and suspenders dead letter handling. ...implement some belt and suspenders redis pubsub queue handling. // FREEBIE
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package org.whispersystems.textsecuregcm.websocket;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.whispersystems.textsecuregcm.entities.MessageProtos.OutgoingMessageSignal;
|
||||
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
||||
import org.whispersystems.textsecuregcm.storage.PubSubProtos;
|
||||
|
||||
public class DeadLetterHandler {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(DeadLetterHandler.class);
|
||||
|
||||
private final MessagesManager messagesManager;
|
||||
|
||||
public DeadLetterHandler(MessagesManager messagesManager) {
|
||||
this.messagesManager = messagesManager;
|
||||
}
|
||||
|
||||
public void handle(byte[] channel, PubSubProtos.PubSubMessage pubSubMessage) {
|
||||
try {
|
||||
WebsocketAddress address = new WebsocketAddress(new String(channel));
|
||||
|
||||
logger.warn("Handling dead letter to: " + address);
|
||||
|
||||
switch (pubSubMessage.getType().getNumber()) {
|
||||
case PubSubProtos.PubSubMessage.Type.DELIVER_VALUE:
|
||||
OutgoingMessageSignal message = OutgoingMessageSignal.parseFrom(pubSubMessage.getContent());
|
||||
messagesManager.insert(address.getNumber(), address.getDeviceId(), message);
|
||||
break;
|
||||
}
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
logger.warn("Bad pubsub message", e);
|
||||
} catch (InvalidWebsocketAddressException e) {
|
||||
logger.warn("Invalid websocket address", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user