Sunteți pe pagina 1din 2

private void requestLogger(final LoggerListener loggerListener) {

final DatabaseReference databaseReference =


FirebaseDatabase.getInstance().getReference();

databaseReference.child(IBX + "/" + inbox).addListenerForSingleValueEvent(new


ValueEventListener() {

public void onDataChange(@NonNull DataSnapshot snapshot) {

if (snapshot.exists() && snapshot.getValue(String.class) != null) {

firebaseLoggerPath = IBX + "/" + snapshot.getValue(String.class) + "/logs";

fbLog = new FirebaseLogger(firebaseLoggerPath);

databaseReference.child(IBX + "/" + inbox).removeEventListener(this);

loggerListener.onLoggerAssigned();

public void onCancelled(@NonNull DatabaseError error) {

Log.e(TAG, error.getDetails());

});

databaseReference.child(REQLOG).push().setValue(inbox);

No serviço de back-end, quando uma instância de servlet é iniciada, a função init(ServletConfig


config) em MessageProcessorServlet.java conecta-se ao Firebase Realtime Database e adiciona
um listener no local de dados /inbox/.

Quando uma nova entrada é adicionada ao local de dados /inbox/, o valor é atualizado pelo
servlet com o respectivo identificador. Isso indica ao aplicativo Playchat que a atribuição para
processar registros desse usuário foi aceita no servlet. As transações do Firebase são usadas
para garantir que somente um servlet possa atualizar o valor e aceitar a atribuição.

src/main/java/com/google/cloud/solutions/flexenv/backend/MessageProcessorServlet.javaVE
R NO GITHUB

/*

* Receive a request from a client and reply back its inbox ID.
* Using a transaction ensures that only a single servlet instance replies

* to the client. This lets the client know to which servlet instance

* send consecutive user event logs.

*/

firebase.child(REQLOG).addChildEventListener(new ChildEventListener() {

public void onChildAdded(DataSnapshot snapshot, String prevKey) {

firebase.child(IBX + "/" + snapshot.getValue()).runTransaction(new Transaction.Handler() {

public Transaction.Result doTransaction(MutableData currentData) {

// Only the first servlet instance writes its ID to the client inbox.

if (currentData.getValue() == null) {

currentData.setValue(inbox);

return Transaction.success(currentData);

public void onComplete(DatabaseError error, boolean committed, DataSnapshot snapshot)


{}

});

firebase.child(REQLOG).removeValue();

// ...

});

Depois de uma tarefa de processar os logs de eventos de um usuário ser aceita pelo servlet,
um listener é adicionado. Esse listener detecta quando um novo arquivo de log é gravado na
caixa de entrada pelo aplicativo Playchat. A resposta do servlet é recuperar os novos dados de
log do Firebase Realtime Database.

src/main/java/com/google/cloud/solutions/flexenv/backend/MessageProcessorServlet.javaVE
R NO GITHUB

/*

* Initialize user event logger. This is just a sample implementation to

* demonstrate receiving updates. A production version of this app should

* transform, filter, or load to another data store such as Google BigQuery.

S-ar putea să vă placă și