[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
|
[news.eclipse.technology.ecomm] An abstract conferencing model
|
In the interests of moving the discussion along, I offer here an
abstract model of conferencing and ask whether and how it maps onto the
proposed ecomm API. This is aimed at conferencing, not
presence/awareness. I understand the ecomm proposal plans to address
both of these push-related services, but I'd like to think of them
separately for the time being.
I have left out some basic things like listeners, events, exceptions,
and factories. I have also not elaborated much on the methods or how to
define or extend the piece parts. I'm trying to keep this pretty
high-level right now to find out if we are talking about the same ideas.
One final note, I think of this API as UI-independent. In the
model-view-controller sense, this is about model, not view.
OK, here goes. I define four main interfaces:
1) ConferenceService -- This is a machine-based container for all
Conferences managed by the machine. It primarily serves as a place to
create a new Conference, be invited to join a Conference, and query
about joined Conferences. In some cases, it might also act as a way to
find out about ongoing Conferences even if they have not been joined.
Factories for constructing new conference types and new conference tool
types may be plugged into the ConferenceService.
An interesting question is whether there is one ConferenceService (a
singleton) for all underlying implementations or multiple
ConferenceServices, one for each underlying implementation. In the
past, I have tended to assume a new ConferenceService per
implementation, but the loss of a unified list of ongoing conferences
(assuming you are running against mutliple implementations) might be
regrettable. On the other hand, managing invites and querying for
ongoing conferences can be fairly implementation-specific. I am
uncertain on whether to have one ConferenceService per implementation.
2) Conference -- This is contained by the ConferenceService. It's
primary job is to manage the multi-point relationship of the
Conference. It is not the place to actually communicate. If you are
familiar with telephony, this is similar to the notion of signalling as
distinct from data transport. In any case, the Conference is where one
learns about ConferencePresence objects as they join and leave the
Conference. This is where one can leave the conference or query the
current list of ConferencePresences.
The Conference also manages the ConferenceTool objects. ConferenceTools
may be created or destroyed and queried for the current list. The
Conference will signal an event when a ConferenceTool is created or
destroyed by some other ConferencePresence.
3) ConferencePresence -- This identifies a communication endpoint in
the multi-point relationship managed by the Conference. These objects
are contained by the Conference. They primarily provide attribute
information regarding the identified presence. They are not directly
used to send information to the presence, i.e., there is no send
method. Communication is done via the Conference Tools.
The ConferencePresence object raises three interesting design questions:
a) Should my presence be noted by the same object as other people's
presence? Generally, I can act on my presence, but I cannot act on
other people's presence, so I have come to think of these as distinct
object types.
b) Should changes to my attributes be signalled through to others in
the conference or should my attributes be final? I like the idea of
changable attributes, but it is more complicated. (It is like bringing
a deeper notion of presence/awareness into the conference.)
c) Should one learn about leaving the Conference via the
ConferencePresence? I used to prefer this and I have come around to
believing that one should listen for leaving in the same place one
listens for joining, i.e., on the Conference.
4) ConferenceTools -- This is where the communication takes place.
ConferenceTools are contained by the Conference. There will be
different tools for different types of communication, e.g., chat, voip,
app-sharing, etc. Each tool will have a different interface depending
on the capabilities one wants to support. They are all sub interfaces
of ConferenceTool. Without diving into the details of any particular
tool it is hard to say much about the methods that will be available.
Presumably, all tools will have some identifying information, such as a
name or properties.
ConferenceTools raise two interesting design questions:
a) Should ConferenceTools be able to contain their own
ConferenceTools? I am inclined to say yes. One might imagine, for
example, a ConferenceTool that simply provides an unformatted
communication channel among the ConferencePresences. Then a tool that
needed two of these could create them and contain them to do whatever it
needs to do. Similarly, we might have a chat tool and an app-sharing
tool and decide later that we want a tool that always has both chat and
app-sharing together. This would just be a new tool containing the
original tools.
b) How are ConferenceTools different from Conferences? This is an
interesting and subtle question. As presented above, I have assumed
that the ConferenceTools "inherit" their multi-point relationship from
the Conference. In other words, if you are in the Conference you are in
all its tools. This is a simple policy, but it is not clear it is the
best way to do things. Just because someone is not able to participate
in some tool (for example, I might not have voip installed) does that
mean others should be precluded from using the tool. Generally, the
answer is that not everyone will be involved in every tool. This means
that we will need to provide indications of presence on the tools so
that we can know who's in and who's out for that tool. So, if
ConferenceTools will also have lists of participants and lists of their
own tools (as in a) above), how are they different from Conferences?
While there is something deeply similar about Conferences and
ConferenceTools, I still see three fundamental differences that make me
inclined to represent the root of the tool hierarchy different from the
other nodes.
i) While the ConferenceTools must somehow "track" the comings and
goings of membership in the Conference, the Conference has no such
requirement.
ii) I do not think it is wise to allow the membership in the
ConferenceTools to exceed the membership of the Conference. I would
consider it surprising to discover that there is someone in the chat who
is not even a member of the containing conference.
iii) I do not think that ConferenceTools will have a URI. The
Conference will be identifiable from outside the Conference, but its
tools will only be identifiable in the context of the Conference. This
has a number of implications, but one of the most interesting is that
one does not think of moving a ConferenceTool from one Conference to
another.
I suppose these last two constraints are an imposition of policy, but
they are policies that I am fairly comfortable with. I might be
persuaded to adopt a looser, more general approach, provided I could
impose these policies when desirable. I haven't really thought this
through yet.
*******
I guess that's enough for now. That should help you understand where I
am coming from. I hope you can help me understand the ways in which
your proposal is similar or different from the approach outlined above.
jfp