Я работаю над приложением чата и в настоящее время слушаю и отправляю события сокетов в Activity.
Теперь я хочу прослушать все события сокета, даже если активность чата находится не на переднем плане, так как я хочу хранить все сообщения от разных пользователей в локальной БД одновременно, я хочу обновить LiveData для обновления пользовательского интерфейса.
Для этого я слушаю события сокета в классе Application следующим образом:
public class ChatApplication extends Application {
public Socket mSocket;
private Map<String, Boolean> receivedFriendEventsMap = new HashMap<>();
private List<Result> friendsList = new ArrayList<>();
private AppDatabase database;
@Override
public void onCreate() {
super.onCreate();
try {
mSocket = IO.socket(Constants.CHAT_SERVER_URL);
//mSocket.connect();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
Instance = this;
applicationHandler = new Handler(getInstance().getMainLooper());
NativeLoader.initNativeLibs(ChatApplication.getInstance());
//mSocket.connect();
database = AppDatabase.getDatabase(getApplicationContext());
mSocket.on("friend_status", new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d(TAG, "" + args[0] + args[1]);
receivedFriendEventsMap.put((String) args[0], (Boolean) args[1]);
}
});
mSocket.on("listen_friend_message", new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d(TAG, "listen_friend_message: " + (String) args[0] + args[1]);
SocketMessage socketMessage = new Gson().fromJson((String) args[0], SocketMessage.class);
//database.socketMessageDao().addMessage(socketMessage);
mSocket.emit("trigger_friend_message_delivered", socketMessage.getMsg_id(), socketMessage.getSender_id(), socketMessage.getReceiver_id(), args[1]);
}
});
SocketMessage socketMessage = new Gson().fromJson((String) result, SocketMessage.class);
//database.socketMessageDao().addMessage(socketMessage);
Log.d(TAG, new Gson().toJson(database.socketMessageDao().getAllMessages(), new TypeToken<List<SocketMessage>>() {
}.getType()));
}
Это правильный подход? Если нет, может кто-нибудь предложить мне хорошее решение. Любая помощь приветствуется.