blob: 382490704148675a52c1fba45a519cdf2fab7cfa [file] [log] [blame]
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>eclipse communication framework use cases</title>
<link rel="stylesheet" href="http://www.eclipse.org/default_style.css" type="text/css">
</head>
<body bgcolor="#FFFFFF">
</table>
<table border=0 cellspacing=5 cellpadding=2 width="100%">
<tbody>
<tr>
<td width="69%" class="bannertext"><font class="indextop style2">eclipse communication framework use cases</font>
<br><br>
<font class="indexsub"></font>
</td>
<td width="31%"><div align="center"><img src="../images/Idea.jpg" width="120" height="86"
hspace="50" align="middle"></div></td>
</tr>
</tbody>
</table>
<table border=0 cellspacing=5 cellpadding=2 width="100%" >
<tr>
<td align=left valign=top bgcolor="#0080C0">
<font color="#FFFFFF" face="Arial,Helvetica">
&nbsp;<b>Chat Use Case</b>
</font>
</td>
</tr>
<tr>
<td valign="top">
<p>The ECF development team is considering at least four distinct types of chat use
cases depending on whether GroupIDs and chat SharedObject IDs are well-known or not.
We have given each of the types a name suggested by the manner in which it would be
used. This name is not really the important issue. What's important here is the
combination of well-known and individualized IDs.</p>
<hr>
<h4>1. ChatRoom -- GroupID well-known, Chat SharedObject ID well-known</h4>
<p>In this case everyone knows a common familiar GroupID, e.g., "server.com" and joins
that container. They also create a SharedObject with the well-known ID, "chat".
This is a big space that anyone with permission to use "server.com" may enter.</p>
<h4>2. IM -- GroupID well-known, Chat SharedObject ID individualized</h4>
<p>We all join a well-known container for some purpose. It doesn't have to be to chat.
We might have joined the container for the purpose of learning about people's
online status. Then, you decide that you would like to chat with someone, but don't
want to go to the trouble of creating a new container for that purpose. So, instead,
you create a ChatSharedObject, but give it a unique ID. Then, you direct some other
group member to create that ChatSharedObject as well. Now, we can use the chat, but
others are not aware of our chat and cannot participate.</p>
<p><u>Note</u>: The privacy afforded by this approach depends somewhat on whether
getSharedObjectIDs returns all the IDs known at the container or only the ones
created by any user.</p>
<h4>3. Chat Meeting -- GroupID individualized, Chat SharedObject ID well-known</h4>
</p>This case requires two containers: one for the actual chat and one to communicate
the individualized GroupID of that chat.</p>
<ol>
<li>We all join a well-known container that we call the Lobby.
Let's say it has a GroupID of "server.com/lobby" and provides some
way to send invitations from one user to another.</li><br>
<li>One user creates a new container and joins it by creating a unique
GroupID for the chat, e.g., "server.com/mychat". In addition, the
user adds a ChatSharedObject with the well-known ID, "chat".</li><br>
<li>This first user sends an invitation to another user via the lobby
to let the second user know that they are invited to the
"server.com/mychat" container. (Presumably, it would also be good
to send information about the container type, just in case we want
to support multiple types of meetings.</li><br>
<li>The second user joins the meeting by creating the appropriate chat
container, adding in the appropriate chat object, and joining with
the "server.com/mychat" GroupID.</li>
</ol>
<h4>4. Whisper -- GroupID individualized, Chat SharedObject ID individualized</h4>
<p>Let's imagine that the ChatMeeting identified above has been joined by many people
and we now want to support a private conversation among a subset of the participants.
Assuming we are too lazy to create a new container for the purpose, one user might
create a new chat object with an individualized ID, then, as in the IM case, they
would instruct another user to create the object as well.</p>
</p><u>Note</u>: The privacy afforded by this approach depends somewhat on whether
getSharedObjectIDs returns all the IDs known at the container or only the ones created
by any user.</p>
<hr>
<h4>Chat Use Case Considerations</h4>
<p>One thing the ECF development team with these use cases is to begin to tie specific
communication features to patterns in the use of ECF containers and shared objects. For
example, say that you had a 'well-known' chat, and you wanted to have a feature that
started a shared whiteboard with the same set of participants. Well, one way to implement
this would be to have the chat create a new shared object (a whiteboard component) that
implemented the whiteboard communications functionality (i.e. keeping the whiteboard
state synchronized) and the whiteboard UI. In this way, the whiteboard functionality
would be separable from the chat, and usable within different communications contexts.
The whiteboard component could even be implemented to run similarly on multiple container
implementations (multiple providers)...e.g. SIP or XMPP or whatever. In this way a library
of components could be created, implemented as shared objects (in this case), or
combinations of shared objects and provider implementations (less desirable from a
component design point of view).</p>
<p>In any event, we think that with a variety of use cases (these and others) and a
couple of functioning providers (coming very shortly), we can experiment a little bit
with the design of communications components, and begin to connect various features
with individual components or sets of components (implemented as independent shared
objects, shared objects with connectors, patterns of classes used by shared objects,
custom containers, etc).</p>
</td>
<tr>
</table>
</body>
</html>