diff options
author | Eike Stepper | 2007-11-10 10:47:41 +0000 |
---|---|---|
committer | Eike Stepper | 2007-11-10 10:47:41 +0000 |
commit | 4fbe5ddbb62e439ad7708520674c3f03ebb512c6 (patch) | |
tree | 490f76a334bd59b6a404ddf23bd799a59093093b /plugins/org.eclipse.net4j.buddies.server | |
parent | 1f56c2e90579798c8a922db1a3d7cacd26348fd3 (diff) | |
download | cdo-4fbe5ddbb62e439ad7708520674c3f03ebb512c6.tar.gz cdo-4fbe5ddbb62e439ad7708520674c3f03ebb512c6.tar.xz cdo-4fbe5ddbb62e439ad7708520674c3f03ebb512c6.zip |
[209380] Add invitation capability for multi buddy collaborations
https://bugs.eclipse.org/bugs/show_bug.cgi?id=209380
Diffstat (limited to 'plugins/org.eclipse.net4j.buddies.server')
5 files changed, 110 insertions, 22 deletions
diff --git a/plugins/org.eclipse.net4j.buddies.server/BuddiesServer.launch b/plugins/org.eclipse.net4j.buddies.server/BuddiesServer.launch index 2c0bd1fda2..c0bbdf5d46 100644 --- a/plugins/org.eclipse.net4j.buddies.server/BuddiesServer.launch +++ b/plugins/org.eclipse.net4j.buddies.server/BuddiesServer.launch @@ -15,6 +15,10 @@ <booleanAttribute key="includeOptional" value="true"/> <stringAttribute key="location" value="${workspace_loc}/../buddies.server"/> <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> +<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> +<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> +</listAttribute> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -debug -console --launcher.XXMaxPermSize 128M"/> <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Ddebug=true -Dnet4j.config=${resource_loc:/org.eclipse.net4j.buddies.server/config}"/> diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java index bc50e84fd0..5117c716ad 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java @@ -13,11 +13,12 @@ package org.eclipse.net4j.buddies.internal.server.protocol; import org.eclipse.net4j.IChannel; import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.protocol.IBuddy; +import org.eclipse.net4j.buddies.protocol.ProtocolUtil; import org.eclipse.net4j.signal.Request; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; import java.io.IOException; -import java.util.Set; +import java.util.Collection; /** * @author Eike Stepper @@ -26,9 +27,9 @@ public class CollaborationInitiatedNotification extends Request { private long collaborationID; - private Set<IBuddy> buddies; + private Collection<IBuddy> buddies; - public CollaborationInitiatedNotification(IChannel channel, long collaborationID, Set<IBuddy> buddies) + public CollaborationInitiatedNotification(IChannel channel, long collaborationID, Collection<IBuddy> buddies) { super(channel); this.collaborationID = collaborationID; @@ -45,17 +46,6 @@ public class CollaborationInitiatedNotification extends Request protected void requesting(ExtendedDataOutputStream out) throws IOException { out.writeLong(collaborationID); - if (buddies == null) - { - out.writeInt(0); - } - else - { - out.writeInt(buddies.size()); - for (IBuddy buddy : buddies) - { - out.writeString(buddy.getUserID()); - } - } + ProtocolUtil.writeBuddies(out, buddies); } } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java index b98aea50df..cf0e94ae62 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java @@ -14,6 +14,7 @@ import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants; import org.eclipse.net4j.buddies.protocol.IBuddy; import org.eclipse.net4j.buddies.protocol.ICollaboration; import org.eclipse.net4j.buddies.protocol.ISession; +import org.eclipse.net4j.buddies.protocol.ProtocolUtil; import org.eclipse.net4j.buddies.server.IBuddyAdmin; import org.eclipse.net4j.signal.IndicationWithResponse; import org.eclipse.net4j.util.io.ExtendedDataInputStream; @@ -41,13 +42,7 @@ public class InitiateCollaborationIndication extends IndicationWithResponse @Override protected void indicating(ExtendedDataInputStream in) throws IOException { - int size = in.readInt(); - String[] userIDs = new String[size]; - for (int i = 0; i < size; i++) - { - userIDs[i] = in.readString(); - } - + String[] userIDs = ProtocolUtil.readUserIDs(in); ISession session = (ISession)getProtocol().getInfraStructure(); IBuddy initiator = session.getSelf(); collaboration = IBuddyAdmin.INSTANCE.initiateCollaboration(initiator, userIDs); diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java new file mode 100644 index 0000000000..21e0ceaa71 --- /dev/null +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.net4j.buddies.internal.server.protocol; + +import org.eclipse.net4j.IChannel; +import org.eclipse.net4j.buddies.internal.protocol.Buddy; +import org.eclipse.net4j.buddies.internal.protocol.Collaboration; +import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants; +import org.eclipse.net4j.buddies.internal.server.BuddyAdmin; +import org.eclipse.net4j.buddies.protocol.IBuddy; +import org.eclipse.net4j.buddies.protocol.ISession; +import org.eclipse.net4j.buddies.protocol.ProtocolUtil; +import org.eclipse.net4j.signal.Indication; +import org.eclipse.net4j.util.WrappedException; +import org.eclipse.net4j.util.io.ExtendedDataInputStream; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author Eike Stepper + */ +public class InviteBuddiesIndication extends Indication +{ + public InviteBuddiesIndication() + { + } + + @Override + protected short getSignalID() + { + return ProtocolConstants.SIGNAL_INVITE_BUDDIES; + } + + @Override + protected void indicating(ExtendedDataInputStream in) throws IOException + { + long collaborationID = in.readLong(); + String[] userIDs = ProtocolUtil.readUserIDs(in); + + Collaboration collaboration = (Collaboration)BuddyAdmin.INSTANCE.getCollaboration(collaborationID); + Map<String, ISession> sessions = BuddyAdmin.INSTANCE.getSessions(); + Set<IBuddy> added = new HashSet<IBuddy>(); + + for (String userID : userIDs) + { + ISession session = sessions.get(userID); + IBuddy buddy = session.getSelf(); + if (collaboration.addBuddy(buddy)) + { + ((Buddy)buddy).addCollaboration(collaboration); + added.add(buddy); + } + } + + List<IBuddy> buddies = Arrays.asList(collaboration.getBuddies()); + for (IBuddy buddy : buddies) + { + IChannel channel = buddy.getSession().getChannel(); + Set<IBuddy> set = new HashSet<IBuddy>(); + if (added.contains(buddy)) + { + set.addAll(buddies); + set.remove(buddy); + } + else + { + set.addAll(added); + } + + if (!set.isEmpty()) + { + try + { + new CollaborationInitiatedNotification(channel, collaborationID, set).send(); + } + catch (Exception ex) + { + throw WrappedException.wrap(ex); + } + } + } + } +} diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java index 64e53e2bfe..5628ca17b4 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java @@ -47,6 +47,9 @@ public class ServerProtocol extends SignalProtocol case ProtocolConstants.SIGNAL_INITIATE_COLLABORATION: return new InitiateCollaborationIndication(); + case ProtocolConstants.SIGNAL_INVITE_BUDDIES: + return new InviteBuddiesIndication(); + case ProtocolConstants.SIGNAL_COLLABORATION_LEFT: return new ServerCollaborationLeftIndication(); |