package org.rakam.plugin.user.mailbox; import java.time.Instant; import java.util.List; import java.util.function.Consumer; public interface UserMailboxStorage { Message send(String project, Object fromUser, Object toUser, Integer parentId, String message, Instant date); void createProjectIfNotExists(String projectId, boolean userKeyIsNumeric); MessageListener listen(String projectId, String user, Consumer<Data> messageConsumer); MessageListener listenAllUsers(String projectId, Consumer<Data> messageConsumer); List<Message> getConversation(String project, String userId, Integer parentId, int limit, long offset); void markMessagesAsRead(String project, String userId, int[] messageIds); interface MessageListener { void shutdown(); } enum Operation { msg, typing } class Data { public final Operation op; public final String payload; public Data(Operation op, String payload) { this.op = op; this.payload = payload; } public String serialize() { return op.name()+"\n"+payload; } } }