Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2007-11-10 10:47:41 +0000
committerEike Stepper2007-11-10 10:47:41 +0000
commit4fbe5ddbb62e439ad7708520674c3f03ebb512c6 (patch)
tree490f76a334bd59b6a404ddf23bd799a59093093b /plugins/org.eclipse.net4j.buddies.server
parent1f56c2e90579798c8a922db1a3d7cacd26348fd3 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.net4j.buddies.server/BuddiesServer.launch4
-rw-r--r--plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/CollaborationInitiatedNotification.java20
-rw-r--r--plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InitiateCollaborationIndication.java9
-rw-r--r--plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InviteBuddiesIndication.java96
-rw-r--r--plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java3
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}&#13;&#10;-debug&#13;&#10;-console&#13;&#10;--launcher.XXMaxPermSize&#13;&#10;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&#13;&#10;-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();

Back to the top