Skip to content
Snippets Groups Projects
Unverified Commit fb095c1f authored by akwizgran's avatar akwizgran
Browse files

Broadcast events for private group invitations.

parent f89d8cbe
No related branches found
No related tags found
No related merge requests found
......@@ -7,7 +7,8 @@ import org.briarproject.api.db.DatabaseExecutor;
import org.briarproject.api.db.DbException;
import org.briarproject.api.event.Event;
import org.briarproject.api.event.EventBus;
import org.briarproject.api.event.GroupInvitationReceivedEvent;
import org.briarproject.api.event.GroupInvitationRequestReceivedEvent;
import org.briarproject.api.event.GroupInvitationResponseReceivedEvent;
import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.privategroup.PrivateGroup;
import org.briarproject.api.privategroup.PrivateGroupManager;
......@@ -44,8 +45,11 @@ public class GroupInvitationControllerImpl
public void eventOccurred(Event e) {
super.eventOccurred(e);
if (e instanceof GroupInvitationReceivedEvent) {
LOG.info("Group invitation received, reloading");
if (e instanceof GroupInvitationRequestReceivedEvent) {
LOG.info("Group invitation request received, reloading");
listener.loadInvitations(false);
} else if (e instanceof GroupInvitationResponseReceivedEvent) {
LOG.info("Group invitation response received, reloading");
listener.loadInvitations(false);
}
}
......
package org.briarproject.api.event;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.privategroup.PrivateGroup;
import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
public class GroupInvitationReceivedEvent extends
public class GroupInvitationRequestReceivedEvent extends
InvitationRequestReceivedEvent<PrivateGroup> {
public GroupInvitationReceivedEvent(PrivateGroup group, ContactId contactId,
GroupInvitationRequest request) {
public GroupInvitationRequestReceivedEvent(PrivateGroup group,
ContactId contactId, GroupInvitationRequest request) {
super(group, contactId, request);
}
......
package org.briarproject.api.event;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.sharing.InvitationResponse;
public class GroupInvitationResponseReceivedEvent
extends InvitationResponseReceivedEvent {
public GroupInvitationResponseReceivedEvent(ContactId contactId,
InvitationResponse response) {
super(contactId, response);
}
}
......@@ -41,10 +41,10 @@ abstract class AbstractProtocolEngine<S extends Session>
protected final DatabaseComponent db;
protected final ClientHelper clientHelper;
protected final PrivateGroupManager privateGroupManager;
protected final PrivateGroupFactory privateGroupFactory;
private final IdentityManager identityManager;
private final PrivateGroupFactory privateGroupFactory;
private final GroupMessageFactory groupMessageFactory;
private final IdentityManager identityManager;
private final MessageParser messageParser;
private final MessageEncoder messageEncoder;
private final Clock clock;
......
......@@ -3,14 +3,18 @@ package org.briarproject.privategroup.invitation;
import org.briarproject.api.FormatException;
import org.briarproject.api.clients.ClientHelper;
import org.briarproject.api.clients.ProtocolStateException;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.db.DatabaseComponent;
import org.briarproject.api.db.DbException;
import org.briarproject.api.db.Transaction;
import org.briarproject.api.event.GroupInvitationResponseReceivedEvent;
import org.briarproject.api.identity.IdentityManager;
import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.privategroup.GroupMessageFactory;
import org.briarproject.api.privategroup.PrivateGroupFactory;
import org.briarproject.api.privategroup.PrivateGroupManager;
import org.briarproject.api.privategroup.invitation.GroupInvitationResponse;
import org.briarproject.api.sync.Message;
import org.briarproject.api.system.Clock;
......@@ -35,7 +39,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
IdentityManager identityManager, MessageParser messageParser,
MessageEncoder messageEncoder, Clock clock) {
super(db, clientHelper, privateGroupManager, privateGroupFactory,
groupMessageFactory, identityManager,messageParser,
groupMessageFactory, identityManager, messageParser,
messageEncoder, clock);
}
......@@ -170,10 +174,14 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
// The dependency, if any, must be the last remote message
if (!isValidDependency(s, m.getPreviousMessageId()))
return abort(txn, s);
// Mark the response visible
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getId(), true);
// Start syncing the private group with the contact
syncPrivateGroupWithContact(txn, s, true);
// Broadcast an event
ContactId contactId = getContactId(txn, m.getContactGroupId());
txn.attach(new GroupInvitationResponseReceivedEvent(contactId,
createInvitationResponse(m, contactId, true)));
// Move to the INVITEE_JOINED state
return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(),
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
......@@ -187,8 +195,12 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
// The dependency, if any, must be the last remote message
if (!isValidDependency(s, m.getPreviousMessageId()))
return abort(txn, s);
// Mark the response visible
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getId(), true);
// Broadcast an event
ContactId contactId = getContactId(txn, m.getContactGroupId());
txn.attach(new GroupInvitationResponseReceivedEvent(contactId,
createInvitationResponse(m, contactId, false)));
// Move to the START state
return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(),
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
......@@ -224,4 +236,12 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
s.getInviteTimestamp(), ERROR);
}
private GroupInvitationResponse createInvitationResponse(
GroupInvitationMessage m, ContactId c, boolean accept) {
SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes());
return new GroupInvitationResponse(m.getId(), sessionId,
m.getContactGroupId(), c, accept, m.getTimestamp(), false,
false, true, false);
}
}
......@@ -3,16 +3,20 @@ package org.briarproject.privategroup.invitation;
import org.briarproject.api.FormatException;
import org.briarproject.api.clients.ClientHelper;
import org.briarproject.api.clients.ProtocolStateException;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.db.DatabaseComponent;
import org.briarproject.api.db.DbException;
import org.briarproject.api.db.Transaction;
import org.briarproject.api.event.GroupInvitationRequestReceivedEvent;
import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.IdentityManager;
import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.privategroup.GroupMessageFactory;
import org.briarproject.api.privategroup.PrivateGroup;
import org.briarproject.api.privategroup.PrivateGroupFactory;
import org.briarproject.api.privategroup.PrivateGroupManager;
import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
import org.briarproject.api.sync.Message;
import org.briarproject.api.sync.MessageId;
import org.briarproject.api.system.Clock;
......@@ -196,6 +200,11 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
// Mark the invite message visible in the UI and available to answer
markMessageVisibleInUi(txn, m.getId(), true);
markMessageAvailableToAnswer(txn, m.getId(), true);
// Broadcast an event
PrivateGroup privateGroup = privateGroupFactory.createPrivateGroup(
m.getGroupName(), m.getCreator(), m.getSalt());
txn.attach(new GroupInvitationRequestReceivedEvent(privateGroup,
contactId, createInvitationRequest(m, contactId)));
// Move to the INVITED state
return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(),
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
......@@ -239,4 +248,13 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
s.getInviteTimestamp(), ERROR);
}
private GroupInvitationRequest createInvitationRequest(InviteMessage m,
ContactId c) {
SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes());
return new GroupInvitationRequest(m.getId(), sessionId,
m.getContactGroupId(), c, m.getMessage(), m.getGroupName(),
m.getCreator(), true, m.getTimestamp(), false, false, true,
false);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment