diff --git a/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java b/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java index 44c994d..0bfc2b6 100644 --- a/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java +++ b/src/main/java/im/rosetta/service/dispatch/push/PushNotifyDispatcher.java @@ -29,24 +29,38 @@ public class PushNotifyDispatcher { return this.pushers.get(tokenType); } - private List findPushTokens(String publicKey) { + private List findPushTokens(String publicKey) { List devices = this.deviceService.getDevicesByPK(publicKey); - List pushTokens = new java.util.ArrayList<>(); + List rtTokens = new java.util.ArrayList<>(); for(Device device : devices){ - pushTokens.addAll(device.getTokens()); + for(PushToken pushToken : device.getTokens()){ + rtTokens.add(new RuntimeToken(pushToken.getType(), pushToken.getToken())); + } } - return pushTokens; + return rtTokens; + } + + private List findPushTokens(List publicKeys) { + List rtTokens = new java.util.ArrayList<>(); + for(String publicKey : publicKeys){ + List devices = this.deviceService.getDevicesByPK(publicKey); + for(Device device : devices){ + for(PushToken pushToken : device.getTokens()){ + rtTokens.add(new RuntimeToken(pushToken.getType(), pushToken.getToken())); + } + } + } + return rtTokens; } - /** * Отправить уведомление пользователю с publicKey, используя все его токены для отправки уведомления, если таковые имеются * @param publicKey публичный ключ пользователя, которому нужно отправить уведомление * @param data данные уведомления */ public void sendPush(String publicKey, HashMap data) { + List pushTokens = this.findPushTokens(publicKey); executor.execute(() -> { - List pushTokens = this.findPushTokens(publicKey); - for(PushToken pushToken : pushTokens){ + for(RuntimeToken pushToken : pushTokens){ Pusher pusher = this.findPusher(pushToken.getType()); if(pusher != null){ pusher.sendPush(pushToken.getToken(), data); @@ -61,17 +75,16 @@ public class PushNotifyDispatcher { * @param data данные уведомления */ public void sendPush(List publicKeys, HashMap data) { + List pushTokens = this.findPushTokens(publicKeys); executor.execute(() -> { - for(String publicKey : publicKeys){ - List pushTokens = this.findPushTokens(publicKey); - for(PushToken pushToken : pushTokens){ - Pusher pusher = this.findPusher(pushToken.getType()); + for(RuntimeToken pushToken : pushTokens){ + Pusher pusher = this.findPusher(pushToken.getType()); if(pusher != null){ pusher.sendPush(pushToken.getToken(), data); } } } - }); + ); } diff --git a/src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java b/src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java new file mode 100644 index 0000000..f952dca --- /dev/null +++ b/src/main/java/im/rosetta/service/dispatch/push/RuntimeToken.java @@ -0,0 +1,23 @@ +package im.rosetta.service.dispatch.push; + +import im.rosetta.packet.runtime.TokenType; + +public class RuntimeToken { + + private TokenType type; + private String token; + + public RuntimeToken(TokenType type, String token) { + this.type = type; + this.token = token; + } + + public TokenType getType() { + return type; + } + + public String getToken() { + return token; + } + +}