Converted database events from an enum to classes to allow them to

carry data.
This commit is contained in:
akwizgran
2011-10-17 22:47:38 +01:00
parent 89001e4c91
commit ec56b12384
18 changed files with 165 additions and 80 deletions

View File

@@ -16,9 +16,12 @@ import net.sf.briar.api.ContactId;
import net.sf.briar.api.TransportId;
import net.sf.briar.api.crypto.CryptoComponent;
import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener;
import net.sf.briar.api.db.DbException;
import net.sf.briar.api.db.NoSuchContactException;
import net.sf.briar.api.db.event.ContactAddedEvent;
import net.sf.briar.api.db.event.ContactRemovedEvent;
import net.sf.briar.api.db.event.DatabaseEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.transport.ConnectionRecogniser;
import net.sf.briar.api.transport.ConnectionWindow;
@@ -127,9 +130,9 @@ DatabaseListener {
return contactId;
}
public void eventOccurred(Event e) {
public void eventOccurred(DatabaseEvent e) {
// When the set of contacts changes we need to re-initialise everything
if(e == Event.CONTACTS_UPDATED) {
if(e instanceof ContactAddedEvent || e instanceof ContactRemovedEvent) {
synchronized(this) {
initialised = false;
}

View File

@@ -4,7 +4,7 @@ interface Flags {
// Flags raised by the database listener
static final int BATCH_RECEIVED = 1;
static final int CONTACTS_UPDATED = 2;
static final int CONTACT_REMOVED = 2;
static final int MESSAGES_ADDED = 4;
static final int SUBSCRIPTIONS_UPDATED = 8;
static final int TRANSPORTS_UPDATED = 16;

View File

@@ -14,8 +14,14 @@ import net.sf.briar.api.ContactId;
import net.sf.briar.api.FormatException;
import net.sf.briar.api.TransportId;
import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener;
import net.sf.briar.api.db.DbException;
import net.sf.briar.api.db.event.BatchReceivedEvent;
import net.sf.briar.api.db.event.ContactRemovedEvent;
import net.sf.briar.api.db.event.DatabaseEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.db.event.MessagesAddedEvent;
import net.sf.briar.api.db.event.SubscriptionsUpdatedEvent;
import net.sf.briar.api.db.event.TransportsUpdatedEvent;
import net.sf.briar.api.protocol.Ack;
import net.sf.briar.api.protocol.Batch;
import net.sf.briar.api.protocol.MessageId;
@@ -81,19 +87,28 @@ abstract class StreamConnection implements DatabaseListener {
protected abstract ConnectionWriter createConnectionWriter()
throws DbException, IOException ;
public void eventOccurred(Event e) {
public void eventOccurred(DatabaseEvent e) {
synchronized(this) {
if(e == Event.BATCH_RECEIVED)
if(e instanceof BatchReceivedEvent) {
writerFlags |= Flags.BATCH_RECEIVED;
else if(e == Event.CONTACTS_UPDATED)
writerFlags |= Flags.CONTACTS_UPDATED;
else if(e == Event.MESSAGES_ADDED)
notifyAll();
} else if(e instanceof ContactRemovedEvent) {
ContactId c = ((ContactRemovedEvent) e).getContactId();
if(contactId.equals(c)) {
writerFlags |= Flags.CONTACT_REMOVED;
notifyAll();
}
} else if(e instanceof MessagesAddedEvent) {
writerFlags |= Flags.MESSAGES_ADDED;
else if(e == Event.SUBSCRIPTIONS_UPDATED)
notifyAll();
} else if(e instanceof SubscriptionsUpdatedEvent) {
// FIXME: Check whether the change affected this contact
writerFlags |= Flags.SUBSCRIPTIONS_UPDATED;
else if(e == Event.TRANSPORTS_UPDATED)
notifyAll();
} else if(e instanceof TransportsUpdatedEvent) {
writerFlags |= Flags.TRANSPORTS_UPDATED;
notifyAll();
notifyAll();
}
}
}
@@ -207,11 +222,9 @@ abstract class StreamConnection implements DatabaseListener {
writerFlags = 0;
}
// Handle the flags in approximate order of urgency
if((flags & Flags.CONTACTS_UPDATED) != 0) {
if(!db.getContacts().contains(contactId)) {
connection.dispose(true);
return;
}
if((flags & Flags.CONTACT_REMOVED) != 0) {
connection.dispose(true);
return;
}
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
sendTransports(transportWriter);
@@ -246,11 +259,9 @@ abstract class StreamConnection implements DatabaseListener {
writerFlags = 0;
}
// Handle the flags in approximate order of urgency
if((flags & Flags.CONTACTS_UPDATED) != 0) {
if(!db.getContacts().contains(contactId)) {
connection.dispose(true);
return;
}
if((flags & Flags.CONTACT_REMOVED) != 0) {
connection.dispose(true);
return;
}
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
sendTransports(transportWriter);
@@ -279,11 +290,9 @@ abstract class StreamConnection implements DatabaseListener {
writerFlags = 0;
}
// Handle the flags in approximate order of urgency
if((flags & Flags.CONTACTS_UPDATED) != 0) {
if(!db.getContacts().contains(contactId)) {
connection.dispose(true);
return;
}
if((flags & Flags.CONTACT_REMOVED) != 0) {
connection.dispose(true);
return;
}
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
sendTransports(transportWriter);