U.S. patent application number 10/219222 was filed with the patent office on 2004-02-19 for dynamically extensible application program framework including message and notification routing.
This patent application is currently assigned to Microsoft Corporation. Invention is credited to Fernando, Antonio W., Fernando, Joseph P., Shah, Mehul Y..
Application Number | 20040034860 10/219222 |
Document ID | / |
Family ID | 31714702 |
Filed Date | 2004-02-19 |
United States Patent
Application |
20040034860 |
Kind Code |
A1 |
Fernando, Joseph P. ; et
al. |
February 19, 2004 |
Dynamically extensible application program framework including
message and notification routing
Abstract
Dynamically configuring an application program at run-time via
one or more extension objects. The invention software implements a
framework with one or more extension objects providing
functionality to an application program and an application manager
for integrating the functionality with the application program
during execution of the application program. The framework of the
invention also formulates and routes application messages between
extensible objects of one application program and extensible
objects of other application programs implementing a similar,
dynamically extensible application program framework. On receipt of
messages or notifications, the framework of the receiving
application program facilitates the discovery of the intended
recipient extension object and routes the message accordingly.
Inventors: |
Fernando, Joseph P.;
(Woodinville, WA) ; Shah, Mehul Y.; (Bellevue,
WA) ; Fernando, Antonio W.; (Redmond, WA) |
Correspondence
Address: |
SENNIGER POWERS LEAVITT AND ROEDEL
ONE METROPOLITAN SQUARE
16TH FLOOR
ST LOUIS
MO
63102
US
|
Assignee: |
Microsoft Corporation
|
Family ID: |
31714702 |
Appl. No.: |
10/219222 |
Filed: |
August 15, 2002 |
Current U.S.
Class: |
719/315 ;
719/328 |
Current CPC
Class: |
G06F 9/46 20130101 |
Class at
Publication: |
719/315 ;
719/328 |
International
Class: |
G06F 009/00; G06F
009/46 |
Claims
What is claimed is:
1. A system for a dynamically extensible application program
framework, said system comprising: an application program having
functionality; and one or more extension objects that modify said
functionality during execution of said application program.
2. The system of claim 1, wherein said extension objects modify
said functionality by extending said functionality.
3. The system of claim 1, wherein said extension objects modify
said functionality by adding to said functionality.
4. The system of claim 1, further comprising an application manager
for managing requests by extension objects loaded within the
application program for specific functionality.
5. The system of claim 1, further comprising one or more extension
object providers that provide said one or more extension
objects.
6. The system of claim 1, wherein one of said extension objects
specifies a communication protocol to be used for transferring a
message from said one of said extension objects to another of said
extension objects.
7. The system of claim 1, wherein said extension objects comprise a
plug-in that provides a user interface component.
8. The system of claim 1, further comprising at least one workspace
representing a window, and wherein said extension objects comprise
view extension objects, said view extension objects dividing the
workspace to manage and place one or more user interface elements
within the workspace.
9. The system of claim 1, wherein said extension objects comprise
protocol adapters for establishing and authenticating
connections.
10. The system of claim 1, wherein said extension objects comprise
protocol adapters for obtaining a communication address of a peer
application program.
11. The system of claim 1, wherein said extension objects comprise
protocol adapters to support a plurality of communication
protocols.
12. The system of claim 1, wherein said extension objects comprise
protocol adapters for performing data transfer.
13. One or more computer-readable media having computer-executable
modules for implementing an extensible application program
framework, said modules comprising: one or more extension objects
providing functionality to an application program; and an
application manager module for integrating said functionality with
said application program during execution of said application
program.
14. The computer-readable media of claim 13, wherein said
application manager module comprises a database storing information
relating to said extension objects.
15. The computer-readable media of claim 13, wherein said
application manager module comprises a transfer agent for
discovering, resolving, and loading extension objects used for
communication.
16. The computer-readable media of claim 13, wherein said
application manager module comprises an event dispatcher for
receiving and resolving at least one event from at least one of
said extension objects.
17. The computer-readable media of claim 13, wherein said
application manager module and said extension objects are
implemented on a single computing device.
18. The computer-readable media of claim 13, wherein said extension
objects discover one another via the application manager
module.
19. The computer-readable media of claim 13, wherein said extension
objects register said functionality with said application manager
module to expose said functionality to other registered extension
objects.
20. The computer-readable media of claim 13, wherein said extension
objects comprise one or more protocol adapters raising at least one
framework event in response to a communication port event.
21. The computer-readable media of claim 20, wherein said protocol
adapters route said framework event to an event dispatcher of said
application manager module via a transfer agent of said application
manager.
22. The computer-readable media of claim 13, wherein said
application manager module comprises an event dispatcher to receive
events from said extension objects for routing.
23. The computer-readable media of claim 13, wherein said
application manager module comprises a router for command
routing.
24. The computer-readable media of claim 13, wherein said
application manager module comprises an extension object loader for
initializing said extension objects.
25. The computer-readable media of claim 13, wherein said
application manager module comprises a view selection context
manager to manage user interface selections from a user.
26. A method for dynamically configuring an application program,
said method comprising: defining one or more extension objects to
provide functionality to the application program; and integrating
the functionality provided by the one or more extension objects
with said application program during execution of said application
program.
27. The method of claim 26, wherein one or more extension object
providers supply said extension objects, and wherein said
integrating comprises authenticating said extension object
providers.
28. The method of claim 26, wherein said integrating comprises
querying another application program to determine whether said
another application program supports an extension object providing
desired functionality.
29. The method of claim 26, wherein said integrating comprises:
receiving functionality information from one of said extension
objects relating to specific functionality of said one of said
extension objects; and storing said received functionality
information in a database for access by other ones of said
extension objects to integrate the specific functionality of the
one of said extension objects.
30. The method of claim 29, wherein said integrating further
comprises receiving registration information from said one of said
extension objects, said registration information specifying that
said one of said extension objects is to be loaded responsive to a
request for said specific functionality.
31. The method of claim 29, wherein said integrating further
comprises broadcasting said stored functionality information to
said extension objects.
32. The method of claim 29, wherein said receiving comprises
receiving functionality information from a first one of said
extension objects, and wherein said integrating further comprises:
receiving a request from a second one of said extension objects for
said functionality information; and identifying said first one of
said extension objects to said second one of said extension objects
in response to the received request.
33. The method of claim 32, wherein said identifying comprises
returning, to said second one of said extension objects, a
reference to said first one of said extension objects in response
to the received request.
34. The method of claim 29, wherein said extension objects are
arranged in a hierarchy, and wherein said integrating further
comprises exchanging at least one message between a first one of
said extension objects and a second one of said extension
objects.
35. The method of claim 34, wherein said exchanging comprises:
receiving the message from said first one of said extension
objects; adding a header to the received message; and transmitting
the message with the added header to said second one of said
extension objects, said first one of said extension objects being
subordinate to said second one of said extension objects.
36. The method of claim 34, wherein the message comprises first and
second portions of data and a header, and wherein said exchanging
comprises: receiving the message from said first one of said
extension objects; removing the header from the received message;
processing the first portion of data within the received message
with the header removed; and transmitting the second portion of
data within the received message with the header removed to said
second one of said extension objects, said second one of said
extension objects being subordinate to said first one of said
extension objects.
37. The method of claim 26, wherein said integrating further
comprises receiving registration information from one of said
extension objects, said registration information specifying that
said one of said extension objects is to be loaded at startup of
the application program.
38. The method of claim 26, wherein said integrating comprises
exchanging at least one message between a first one of said
extension objects and a second one of said extension objects.
39. The method of claim 38, wherein said exchanging comprises
encrypting said message by said first one of said extension objects
for decryption only by said second one of said extension
objects.
40. The method of claim 38, wherein said exchanging comprises:
receiving the message from the first one of said extension object
providers; selecting a first one of said extension objects with
which to establish a connection with the second one of said
extension object providers; establishing a connection between said
first one of said extension object providers and said second one of
said extension object providers with said first one of said
extension objects; identifying a type of the established
connection; loading a second one of said extension objects to
handle transfer of the message based on the identified type of
connection; and transferring the message to said second one of said
extension object providers from said first one of said extension
object providers via said second one of said extension objects.
41. The method of claim 38, wherein said exchanging comprises:
establishing a connection between the first one of said extension
object providers and the second one of said extension object
providers; receiving the message from said first one of said
extension object providers via the established connection; removing
a header from the received message; processing a first portion of
data within the received message with the header removed; and
transmitting, based on the processed first portion of data, a
second portion of data within the received message with the header
removed to the application program for further processing.
42. The method of claim 41, wherein the first portion of data
comprises a workspace identifier, said workspace identifier being
associated with the application program.
43. The method of claim 26, wherein one or more computer-readable
media have computer-executable instructions for performing the
method of claim 26.
44. A system for switching between multiple views of a workspace in
a user interface, said system comprising: at least one view
extension object providing at least one user interface element for
the user interface, said user interface being associated with a
dynamically extensible application, said view extension object
corresponding to a view selection service object; and a view
selector object for managing the view selection service object to
transition a view for the workspace.
45. The system of claim 44, wherein the view selector object, in
response to user input, calls the view selection service object to
activate or de-activate the view.
46. The system of claim 44, wherein said view selection service
object stores a state of the view extension object.
47. The system of claim 44, wherein the user interface element is a
plug-in.
48. The system of claim 44, wherein said view extension object
comprises a chat object.
49. A computer-readable medium having stored thereon a data
structure representing a header for a message, said message being
encapsulated by an extension object in an extension object
hierarchy of a dynamically extensible application program, said
data structure comprising: a type field identifying a class of the
extension object; and a name field identifying the extension
object.
50. The computer-readable medium of claim 49, wherein said
extension object relates to a workspace in a user interface, and
wherein said type field corresponds to a type of said workspace in
said user interface.
51. The computer-readable medium of claim 49, wherein said
extension object relates to a workspace in a user interface, and
wherein said name field corresponds to an identifier of said
workspace in said user interface.
Description
TECHNICAL FIELD
[0001] The present invention relates to the field of application
program design. In particular, this invention relates to an
extensible application program framework in which extension object
providers supply extension objects to add functionality to or
change existing functionality of an application program.
BACKGROUND OF THE INVENTION
[0002] Object-oriented programming methodologies are rapidly
replacing the procedure-oriented monolithic application development
that was prevalent a decade ago. In current application program
development frameworks, the exposed functionality is static in
nature in that a fixed and inherent set of exposed properties and
methods are employed by the application components. Existing
extension mechanisms require that extensions be provided via fixed
properties, methods, and general framework updates at compile or
design time. Such current systems fail to provide a dynamically
upgradeable or otherwise extensible application program framework
encompassing both user interface and application logic (i.e., core
infrastructure) components.
[0003] For these reasons, a dynamically extensible application
program framework having messaging and notification routing is
desired to address one or more of these and other
disadvantages.
SUMMARY OF THE INVENTION
[0004] The invention includes software implementing a framework for
a dynamically extensible application program. In particular, the
invention software includes one or more extension objects providing
functionality to the application program and an application manager
for integrating the functionality with the application program
during execution of the application program.
[0005] Rather than a static configuration of functionality for an
application program, the extensible application program framework
of the invention provides for dynamic reconfiguration of
application program functionality, on the fly, without a
re-compilation of the application program. The extensible
application program framework of the invention enables dynamically
extending the inherent functionality that is available for a
component resident within the application program through extension
objects. An extension object is proffered by an extension object
provider when the extension object is first referenced (e.g., the
functionality is first requested). The extension object provider
creates an appropriate extension object that implements the
requested functionality. The extension object services all
references to the extension or other requests for the
functionality. Information about the extension object provider is
registered in a database of the application manager when the
extension object provider is installed. The database is used to
resolve references to the extended methods and/or properties upon
execution of the application program.
[0006] The framework of the invention also formulates and routes
application messages between extensible objects of one application
program and extensible objects of other application programs
implementing a similar, dynamically extensible application program
framework. On receipt of messages or notifications, the framework
of the receiving application program facilitates the discovery of
the intended recipient extension object and routes the message
accordingly.
[0007] The framework of the invention facilitates multiple
extensions developed by different parties over time to reuse,
interoperate and extend existing infrastructure components.
Further, the framework permits the ability to add new user
interface (UI) elements as extension objects that proffer
additional functionality and yet maintain interoperability with
previously released UI components. The invention provides a
development methodology for use in any application development
environment, permits the addition of functionality without
replacing or installing the entire application program by reusing
existing common infrastructure, and facilitates a staged release
approach where features are enhanced and realized over time via
extension objects. In particular, extension object providers
provide extension objects that add new communication channels,
provide or extend communication protocols, implement secure
communication channels by providing authentication and encryption
features, and provide additional UI features or elements.
[0008] In accordance with one aspect of the invention, a system for
a dynamically extensible application program framework includes an
application program having functionality and one or more extension
objects that modify the functionality during execution of the
application program.
[0009] In accordance with another aspect of the invention, one or
more computer-readable media have computer-executable modules for
implementing an extensible application program framework. The
modules include one or more extension objects and an application
manager module. The extension objects provide functionality to an
application program. The application manager module integrates the
functionality with the application program during execution of the
application program.
[0010] In accordance with yet another aspect of the invention, a
method dynamically configures an application program. The method
includes defining one or more extension objects to provide
functionality to the application program. The method also includes
integrating the functionality provided by the one or more extension
objects with the application program during execution of the
application program.
[0011] In accordance with yet another aspect of the invention, a
system switches between multiple views of a workspace in a user
interface. The system includes at least one view extension object
and a view selector object. The view extension object provides at
least one user interface element for the user interface. The user
interface is associated with a dynamically extensible application.
The view extension object corresponds to a view selection service
object. The view selector object manages the view selection service
object to transition a view for the workspace.
[0012] In accordance with yet another aspect of the invention, a
computer-readable medium stores a data structure representing a
header for a message. The message is encapsulated by an extension
object in an extension object hierarchy of a dynamically extensible
application program. The data structure includes a type field
identifying a class of the extension object and a name field
identifying the extension object.
[0013] Alternatively, the invention may comprise various other
methods and apparatuses.
[0014] Other features will be in part apparent and in part pointed
out hereinafter.
BRIEF DESCRIPTION OF THE DRAWINGS
[0015] FIG. 1 is an exemplary block diagram illustrating components
of the application framework.
[0016] FIG. 2 is an exemplary block diagram illustrating
interaction between the components of the application
framework.
[0017] FIG. 3 is an exemplary block diagram illustrating a
hierarchy of extension objects.
[0018] FIG. 4 is an exemplary block diagram illustrating
interaction of view extension objects with a workspace.
[0019] FIG. 5 is an exemplary block diagram illustrating workspace
extension through view extension object providers.
[0020] FIG. 6 is an exemplary block diagram illustrating
communication between applications via the extensible application
framework.
[0021] FIG. 7 is an exemplary block diagram illustrating sending a
message via the transfer agent.
[0022] FIG. 8 is an exemplary block diagram illustrating receiving
a message via the transfer agent.
[0023] FIG. 9 is an exemplary block diagram illustrating operation
of protocol adapters.
[0024] FIG. 10 is a block diagram illustrating one example of a
suitable computing system environment in which the invention may be
implemented.
[0025] Corresponding reference characters indicate corresponding
parts throughout the drawings.
DETAILED DESCRIPTION OF THE INVENTION
[0026] Many application programs are multi-tiered, static, and have
distinguished structure. To add functionality to these application
programs, the application programs are recompiled and delivered in
their entirety to end users of the application program. In
contrast, for application programs implementing the dynamically
configurable framework of the invention, functionality can be
added, deleted, or otherwise modified in each layer of the
application program via extension objects as illustrated in FIG. 1.
With reference to FIG. 1, an application program implemented
according to a framework 102 of the invention includes, but is not
limited to, a workspace 104, an application manager 106, and one or
more extension object providers 108 such as extension object
provider #1 through extension object provider #N, where N is a
positive integer value. The application manager 106 includes, but
is not limited to, a database 110, a transfer agent 112, an event
dispatcher 114, and a view selector object 116. Each extension
object provider 108 includes one or more extension objects 118 such
as extension object #1 through extension object #X, where X is a
positive integer value.
[0027] To add functionality to an application program implemented
in accordance with the invention, an extension object 118 or other
component implementing the desired functionality is used to upgrade
the application program. That is, the extension objects 118 modify
(e.g., add, delete, or replace) the functionality of the
application program. The extension objects 118 modify the
functionality during execution of the application program. For
example, functionality embodied within the extension object 118 may
enhance a user interface or provide for additional protocol
adaptation at a later time to extend the application program. Those
skilled in the art are familiar with implementing and delivering
application programs via computer-readable media or via downloading
over a network. If protocols (e.g., communication protocols) are
developed after the application program has been implemented and
delivered, an extension object 118 may be delivered to add a
corresponding protocol adapter to enable support for the developed
protocol. The extension objects 118 may be developed by a developer
of the application program or by third parties. In one exemplary
embodiment, the extension objects 118 are instantiated objects as
described in the context of object-oriented programming. However,
it is contemplated by the inventors that extension objects 118 and
the framework of the invention as described herein are applicable
in an environment other than an object-oriented environment.
[0028] In addition, it is contemplated by the inventors that the
invention software may include more or less services and/or
components than those illustrated in FIGS. 1-9. In addition, the
services and/or components of the invention software may include
more or less functionality than the services, components, and
functionality described and illustrated herein. In addition, those
skilled in the art will note that the framework 102 and software of
the invention may implement various communications protocols not
specifically limited to the communications protocols described
herein. Also, the application program framework 102 may be
implemented by different application programs on a single computing
device to facilitate communication between the application
programs. Alternatively, the application program framework 102 may
be implemented by different application programs executing on
different computing devices to facilitate communication between the
application programs.
[0029] One embodiment where such an application program framework
can be used is in case of a peer-to-peer application such as
instant messaging. In such an application, new functionality such
as voice and video communication, file sharing, shared browsing,
shared music listening, etc. can be added to the application after
the application is initially released. Also, new communications
protocols may be added to the application either to support new
functionality or to enable this functionality between different
kinds of peers. In an example of the latter, one peer is a user on
one instant messaging service and the other peer is a user on
another instant messaging service. Note that this is only one
example of an application which could use such an application
framework to extend functionality over time.
[0030] In one embodiment as illustrated in FIG. 2, components of
the framework 102 include the application manager 106, one or more
extension object providers 108, one or more extension objects 118,
and one or more workspaces 104. In addition, communication between
components of the framework 102 and between frameworks 102 is
implemented via messages. Depending on the type and needs of the
application program to be implemented, one or more of the
components illustrated in FIG. 2 are included with the application
program. In one embodiment, no extension objects 118 are included
in application programs that are shipped initially to the end user.
Later, as additional functionality is requested, extension objects
118 implementing the requested functionality are shipped to the end
user. For example, communicative application programs (e.g.,
application programs that communicate with other application
programs or other computing devices) utilize the transfer agent 112
within the application manager, so the transfer agent 112 is
included with the application manager for those communicative
application programs. The transfer agent 1 12 is not included with
the application manager 106 for non-communicative application
programs.
[0031] In the illustrated embodiment, the framework 102 includes
default extension objects 210 and extension objects as UI elements
220. Further details of the application program framework 102 are
described in the following sections.
Application Manager
[0032] The application manager may include one or more of the
following: the database 110, the transfer agent 112, the event
dispatcher 114, the view selector object 116, an extension object
loader 202, a query service 204, and a message routing module 206
for routing messages within a particular application program.
[0033] When the framework 102 is initialized at application program
startup, the framework 102 creates the application manager 106.
This centralized component manages requests for specific
functionality by other components (e.g., extension objects 118)
that are loaded within the framework 102. Simultaneously, the
application manager 106 services requests from extension objects
118 which are currently loaded to obtain the identity to other
extension objects 118 that may be installed later to provide other
specific functionality. When a request for specific functionality
is received by the application manager 106, the application manager
106 queries the database 110 to locate the appropriate extension
object provider 108, checks the validity of the request and of the
provider 108, instantiates the appropriate extension object 118,
obtains the required interfaces, and identifies the instantiated
extension object 118 to the requesting component. For example, the
application manager 106 may return a reference, handle, or pointer
of the instantiated extension object 118 to the requesting
component. In one embodiment, extension objects 118 are created in
response to a request from other extension objects 118 or the
application manager 106 with the exception of specific framework
objects such as those that provide the basic functionality of the
application manager 106. Certain extension object providers 108,
however, can register to have their extension objects 118 be loaded
at startup.
[0034] In addition, as described below, the application manager 106
facilitates discovery and resolution between multiple extension
object providers 118 and provides message/event routing within the
application program framework 102. In particular, previously
installed extension objects 118 can discover newly installed
extension objects 118. The application manager 106 also facilitates
discovery between application programs on the same computing device
or on different computing devices. For example, an application
program can discover whether another application program supports a
given protocol. In one embodiment, extension objects 118 that are
specifically used for communication are discovered, resolved, and
loaded by the transfer agent 112 within the application manager
106.
Extension Object Providers
[0035] In one embodiment, extension object providers 108 are
executables that house one or more extension objects 118, described
in greater detail below. Extension object providers 108 implement
specific interfaces through which the version of the extension
object provider 108 can be verified, certificates can be used to
check for authenticity and validity of the extension object
provider 108, and instances of the housed extension objects 118 can
be instantiated. Those skilled in the art will appreciate that a
single executable could provide multiple extension objects 118 such
as illustrated in FIG. 2. When an extension object 118 is
instantiated, the instantiated extension object 118 may request
functionality that is proffered by other extension object providers
108. In such cases, the other extension object providers 108 will
also be loaded by the application manager 106.
[0036] Upon installation, extension object providers 108 register
with the database 110 of the application manager 106. That is, the
extension object providers 108 contribute registration information
such as presence information and housed extension objects 118 to
the database 110 in the application manager 106 to register with
the framework 102. Optional authentication routines can be
performed at this stage to prevent rogue executables from
registering themselves with the framework 102. For example, the
application manager 106 may ask the registering extension object
provider 108 for a certificate or other credential to verify that
the registering extension object provider 108 was obtained from an
authorized or otherwise trusted source.
Extension Objects
[0037] Extension objects 118 proffer additional functionality or
augment existing functionality of the framework 102. The extension
objects 118 are not limited or bound to any application logic
layer. For example, the extension objects 118 may include new
functionality added to the application or proffer UI elements 220
to existing functionality. The UI elements 220 may include an
application UI 222, property pages 224, an instance user list 226
that needs to be displayed on the UI, or client area designers 214.
The application program framework 102 services these objects 220 by
routing the appropriate messages to the workspace windows 104.
[0038] Some extension objects 118 proffer UI within workspaces 104
as plug-ins. In addition to the interfaces implemented by the
extension object providers 108 described above, plug-in extension
objects 118 support interfaces that are sited within the workspace
windows 104 and are able to persist and recreate themselves from
instance data.
[0039] Protocol adapters 208 are one form of extension objects 118
that establish and authenticate peer-to-peer connections and
perform data transfers when a message is to be transacted. The
protocol adapters 208 listen to communication port events and may
be instantiated when the framework 102 is initialized or when
communication functionality using the specific protocol is
requested by some other extension object. When an event occurs on
the bound port, the protocol adapters 208 raise an application
program framework event that is routed to the event dispatcher 114
within the application manager 106 through the transfer agent
112.
[0040] Referring now to FIG. 3, in one embodiment of the
application program framework 102, a hierarchical relation may
exist amongst extension objects 118. In FIG. 3, extension object A
communicates with extension object B while extension object B
communicates with extension object C. In this example, extension
object A communicates with extension object B and extension object
D, but has no direct communication with extension object C. In this
example, extension object A may communicate with extension object B
to solicit the services of extension object B. The functionality of
extension object B is never exposed outside the context and
hierarchical relationship of extension object A. Such hierarchies
are utilized within the workspace window 104 to provide alternate
views and layout of the UI (see below for details).
[0041] With further reference to FIG. 2, default extension objects
210 are extension objects 118 made available by the framework 102
to facilitate basic functionality such as persistence. Extension
object providers 108 can provide overriding functionality that
supersedes the default extension objects 220. Exemplary default
extension objects 220 include a persistence object 212, a client
area designer 214 (e.g., a UI element), a global user list 216, and
a generic workspace 218. The generic workspace 218 is a generic
window that provides a client area where UI extension objects
expose their UI and have selection and context-sensitive UI
interaction.
[0042] In the extensible application program framework 102 of the
invention, the extension object provider 108 and the extension
object 118 are often cached when first referenced and subsequent
references to the extension object 118 are resolved to the cache.
Furthermore, because the run-time environment resolves the first
reference to an extension object 118 to the appropriate extension
object provider 108, extension objects 118 can be instantiated or
otherwise activated at application program run-time rather than at
application program compile-time. This permits the deployment of
application logic components (e.g., objects) as well as UI elements
in staged releases where all components seamlessly interact and
realize the additional functionality enabled by the
newly-instantiated components.
[0043] In operation, extension objects 118 proffer their services
to the application manager 106. For example, an extension object
118 providing chat functionality provides other services (e.g.,
secondary functionality) such as voice chat UI views. The secondary
functionality becomes available to all other extension objects 118
through the application manager 106 after the extension object 118
proffers the secondary functionality to the application manager
106. In addition, extension objects 118 inform the application
manager 106 of needed support, and the application manager 106
checks the database 110 to determine whether such support exists
via one or more other previously-loaded extension objects 118. The
application manager 106 provides, to the requesting extension
object 118, a pointer to the extension object 118 having the
requested functionality.
[0044] For example, an extension object 118 or another similar
application program on the same machine or a peer machine may ask
the application manager 106, via the query service 204, whether the
application program supports voice chat. The application manager
106 loads and initializes the voice chat extension object and
provides the interface for the chat service to the requesting
extension object 118. It is contemplated that a first application
program may ask the application manager 106 of a second application
program whether the second application program has chat capability.
The first application program communicates with the second
application program via the chat extension object of the second
application program. In such a manner, the application manager 106
of the second application program acts as a broker to provide the
service. The application manager 106 of the second application
program may need to load and initialize the previously installed
chat extension object to render the object functional. In this
example, a graceful degradation of end user experience occurs when
different peers may or may not have specific extension objects
installed due to different versions of programs or due to other
reasons.
Workspaces
[0045] The workspace 104 is a top-level window that is created by
the application manager 106 and maintained by the application
program framework 102. The framework 102 routes UI messages between
the workspace windows 104 and the plug-in extension objects 118
that proffer and site their UI within the workspace windows (e.g.,
the extension objects UI elements 220). There could be more than
one type of workspace 104 in a given application program and each
workspace 104 is uniquely identifiable by a unique workspace
identifier. For example, each workspace 104 may be associated with
a unique identifier such as WorkSpaceID, which may be a 128-bit
globally unique identifier (GUID).
[0046] When a workspace window 104 is closed, the workspace state
is persisted along with the plug-in extension object identities and
instance data. On creation of a workspace 104 with a specific
workspace identifier, the framework 102 utilizes the persisted data
(if any) to reconstruct the UI layout and state. As with other
extension objects 118, the UI plug-in extension objects are created
and initialized on demand.
[0047] Within the context of a workspace window 104, extension
object providers 108 are contextually referred to as view extension
object providers 402, as illustrated in FIG. 4. The view extension
object providers 402 divide the client area of a given workspace
104 and site or otherwise locate plug-ins in the regions that are
managed by the view extension object providers 402. The view
extension object providers 402 and instantiated view extension
objects 404 facilitate alternate layouts within a workspace window
402. As shown in the example of FIG. 4, a user list extension
object 406, a tab control bar extension object 408, and other
workspace elements 410 are sited in regions of the workspace window
104 that are managed by a view extension object provider 402.
[0048] There can be multiple workspaces 104 for a given application
program. For example, there can be a first workspace for
communication between a first extension object (or application
program) and a second extension object in addition to a second
workspace for communication between the first extension object and
a third extension object. The first workspace is completely
independent of the second workspace. For example, there may be one
workspace for a user A to communicate with a user B using chat and
another, separate workspace for the user A to communicate with a
user C using voice and chat. In this example, there is a separate
chat window in each of the workspaces. In addition, there can be
more than one view extension object provider 108 associated with a
given workspace 104. This will provide multiple selectable views
for a given workspace 104. This concept is further described
below.
[0049] In one embodiment, the workspace window 104 is associated
with another peer, a group of peers, or a device. For example, user
A may have workspace 104 opened and associated with a peer such as
user B. The workspace 104 has a unique identifier such as
WS_USERA_USERB. In this example, an extension object 118 (e.g., a
plug-in) that supports chat functionality is available within the
workspace 104. When the workspace 104 is closed on user A's
machine, the data pertaining to the chat extension object and
associated with workspace WS_USERA_USERB is persisted on user A's
machine. When the workspace 104 is later created with the identity
WS_USERA_USERB, the chat extension object is re-instantiated and
initialized with the association to user B. Similarly, the data
pertaining to the chat extension object and associated with
workspace WS_USERA_USERB is persisted and reloaded on user B's
machine. Through a communication channel established between the
peer machines of user A and user B, data including workspace
identities are synchronized on initial workspace creation.
Subsequent communications on workspace WS_USERA_USERB carry this
identifying signature.
Extending Workspaces through View Extension Object Providers
[0050] As illustrated in the example of FIG. 5, a workspace window
104 operates with at least one view extension object provider 402,
at least one view extension object 404, and at least one UI element
504. One or more view extension objects 404 manage UI elements 504
and their placement within the workspace window 104. A view
extension object 404 includes one or more UI elements 504 and is
responsible for providing a particular look and feel, placement,
state management, message routing, and persistence. UI elements 504
provide specific UI pieces to the workspace through view extension
objects 404. For example, the User List, Tab Control Bar, and other
WorkSpace UI element areas of FIG. 4 are view extension objects 404
that may be provided by a single view extension object provider
402. This enables the view extension object providers 402 to
proffer different UI view extension objects 404 and UI elements
504. Hence, a given workspace 104 can support multiple views. The
relationship between the workspace 104 and the associated view
extension provider 402 is determined the persisted workspace
instance data (or defaults as determined by the database 110 in the
application manager 106). The relationship between multiple view
extension providers 402 is determined by the database 110 in the
application manager 106.
[0051] As outlined in FIG. 5, when one or many view extension
providers 402 provide multiple views for a given workspace 104, the
application program framework 102 enables a common mechanism and UI
to manage the selection of these alternate views. When more than
one view is available for a given workspace 104, the application
program framework 102 enables a view selector object 116 or other
view selection context manager to switch between views. To
facilitate this, each view extension object provider 402 that
provides view extension objects 404 registers their availability
with the view selector object 116 through view selection service
objects 502. Each view extension object 404 has a corresponding
view selection service object 502, which is registered with the
application program framework view selector object 116. This data
is stored in the application manager database 110 to resolve
associations. When the framework 102 detects the possibility of
using multiple views within a given workspace 104, the framework
102 displays a view selector UI and calls the appropriate view
selection service object 502 to transition the view
(activation/de-activation) and restore state. The workspace frame
window 104 informs individual views via message routing (both
application message and default windows messages) and command
routing (e.g., user commands) to resize, move, or adjust as
necessary in response to events such as user selections and inputs.
In a chat application program example, when a first user on one end
of the chat changes views (e.g., changes the background color),
that change occurs for a second user on the other end of the chat.
That is, the application manager 106 associated with the chat
extension object of the first user informs the application manager
106 associated with the chat extension object of the second user of
the view change. The application manager 106 sends an application
message to the chat extension object of the second user to change
the currently active views.
[0052] In one embodiment, the view selector object 116 is
associated with the application manager. It is contemplated by the
inventors that the view selector object 116 may be separate from
the application manager 106.
Events, Messages, and Notifications
[0053] Extension objects 118 register with the application manager
106 to receive messages. Extension objects 118 can broadcast
messages through the application manager 106 by using functionality
exposed by the application manager 106. For example, a software
routine such as BroadcastMessages is available from the application
manager 106. The broadcast messages are sent to all objects that
have registered themselves to receive the messages of a given
type.
[0054] In a distributed application program environment, messages
and notifications could be originated and targeted to extension
objects 118 that have not yet been instantiated if the extension
objects 118 have registered themselves in the application database
110 to receive such messages even if they have not been
instantiated. The invention software constructs, routes and handles
these messages within the application program framework 102 as
herein described.
[0055] The various plug-ins or extension objects 118 can use the
communication channel provided by the framework 102 to communicate
with a similar application program on the peer machine. This
communication channel is itself an extension object 118 proffered
by extension object providers 108, thereby allowing new types of
communication channels with their own connection and authentication
protocols to be added later as needed. The extension objects 118
using a communication channel provided by the framework 102 define
their own message types based on the kind of functionality the
extension objects 118 add to the application program.
[0056] As illustrated in FIG. 6, application A 602 and application
B 604 communicate via a peer-to-peer connection across network 605.
An application UI 608 receives a message or other input from a user
for delivery to a user of application B 604. The application UI 608
communicates the message or input to an application manager 606 of
application A 602. Application manager A 602 sends the message to
application B 604 via the application framework of application A
602. An application manager 610 of application B 604 receives the
message via the application framework of application B 604.
Application manager 610 communicates the message to an application
UI 612 of application B 604 for display to the user of application
B 604.
[0057] For example, a chat extension object defines the structure
of a chat message and includes logic on how chat messages are
generated and how these messages are received, parsed, and
rendered. When a user sends a chat message, the chat extension
object generates a chat message and sends it to the workspace
(e.g., application UI 608) under which the chat extension object is
housed. The workspace provides its own workspace specific
identification headers (e.g., Workspace ID such as WS_USERA_USERB)
and routes the message to the extension object (e.g., protocol
adapter) that provides the communication channel via the
application manager (e.g., application manager 606) and the
transfer agent. When the message is received by the peer's
application program (e.g., application program B 604), the
extension object (e.g., protocol adapter) that provides the
communication channel routes the message to the appropriate
workspace (e.g., application UI 612) via the application manager
(e.g., application manager 610) and the transfer agent. The
workspace parses the workspace-specific information and routes the
message to the chat extension object on the peer's machine that
parses and renders the chat message.
[0058] Since the extension objects 118 are hierarchical, each
extension object 118 defines its own message type. These messages
are wrapped with appropriate message headers by the parent
extension objects and forwarded to the peer application program
where the appropriate portion of the message will be read and
interpreted by the appropriate extension objects 118. As such,
different types of extension objects 118 can be created over time
that can reuse an existing communication infrastructure for sending
and receiving messages specific to the extension objects 118.
[0059] Each extension object 118 can choose to encrypt its messages
in such a way that only an instance of that extension object 118 on
the peer application program can decrypt the encrypted message
using a key known only to that extension object 118. As such,
security can be added to an existing communication channel for
features that require secure communications. For example, the
communication channel provided by an extension object 118 can be
used for both transmitting chat messages and for file transfers.
Chat messages may not require secure communication whereas the file
transfer messages may require security. The file transfer extension
object may encrypt the file transfer messages and use the same
communication channel used for sending unencrypted chat
messages.
[0060] An error condition is generated when a particular extension
object 118 is unavailable on a layer of the routing hierarchy at
the destination peer machine that parallels that of the sender. In
this case, the layer where the routing fails may instantiate a
default handler that fits the category of the intended recipient
extension object type or return the error code through the
messaging chain to the sender.
Message Sending
[0061] As described above, a message can be routed through the
hierarchy of extension objects 118. FIG. 7 illustrates
encapsulating and sending a message via a transfer agent, such as
transfer agent 112. At each level in the hierarchy, the message
data is encapsulated with an envelope specific to the extension
object 118 at that level in the hierarchy. Each envelope identifies
a schema and content of the extension object 118. The extension
object 118 and the associated extension object provider 108
determine organization within the envelope. An exemplary nested
envelope structure at level K in the hierarchy includes a layout
with an extension object type, an extension object identity at
level K, and data for level K. The extension object type and the
extension object identity may each be represented as a globally
unique identifier (GUID). The data for level K may include
envelopes from any subordinate levels K-X in the hierarchy where K
and X are positive integer values. Encryption may occur at any and
all levels in the hierarchy.
[0062] FIG. 7 illustrates a general extension object hierarchy and
data encapsulated within each extension object level envelope. A
user action 702 produces UI element-specific data 706 in a UI
element 704. The UI element 704 encapsulates the UI elementspecific
data 706 into an envelope. For example, the encapsulation with
headers may be represented as:
E(UI Data)=E(UI element type (GUID), UI element ID (GUID), data(UI
element-specific data)) (1)
[0063] In (1), UI element type identifies the type of UI element
704, UI element ID identifies the specific UI element 704, and
data(UI element-specific data) represents the UI element-specific
data 706.
[0064] Once the workspace extension object 710 receives data as a
nested envelope (1) from an extension object subordinate in the
hierarchy of extension objects (e.g., UI element 704), the
workspace extension object 710 encapsulates the received data
within its own envelope that is stamped with workspace-specific
data 714 such as its workspace type and identity. The workspace
extension object 710 operates on the received envelope (1) via an
event handler 712. For example, the encapsulation by the workspace
extension object 710 may be represented as:
E(workspace type (GUID), workspace ID (GUID), data(E(UI Data)))
(2)
[0065] In (2), workspace type identifies the type of workspace
extension object 710, workspace ID uniquely identifies workspace
extension object 710, and data(E(UI Data)) represents the
encapsulated data received from the UI element 704.
[0066] Based on the protocol used or recommended by the workspace,
the workspace extension object 710 interrogates the transfer agent
718 for a suitable protocol adapter. Since the communicating
workspaces maintain an association between peers (e.g., between
user A and user B in the above example), the identity and
destination of the intended recipient is known. The transfer agent
718 transmits the outbound message using the appropriate
communications protocol adapters.
[0067] In one embodiment, the invention software utilizes a
transmission control protocol/Internet protocol (TCP/IP) as the
transport and other protocols for authentication. In the instant
messaging embodiment of the invention, network addresses are
determined by user association and application programming
interface (APIs) calls in an instant messaging server.
Message Receiving
[0068] As illustrated in FIG. 8, connections and messages inbound
from an application program are received by the protocol adapter
extension objects of the receiving application program that strip
the data specific to the protocol adapter (e.g., to perform peer
authentication) and send the message to the transfer agent 802.
Once the data has been received, the transfer agent 802 raises an
application event through the event dispatcher 804 of the
application manager of the receiving application program. The event
dispatcher 804 strips the first envelope and reads a first portion
of the data including the workspace type and workspace identifier.
Utilizing this data, the associated workspace 806 is located if
available, or created if unavailable. A second portion of the
received data (e.g., the remaining portion) is delivered to the
identified workspace 806. For example, a software routine delivers
the received envelope to the identified workspace 806. The
workspace 806 then strips the workspace specific data from the
message envelope (e.g., another first portion) and reads in the
data (e.g., another second portion) intended for the extension
objects (e.g., UI element 810) contained within the workspace 806.
The extension object type and identifier that is stored in each
envelope (e.g., as the first portion) is utilized by the workspace
806 to locate or create the extension object (e.g., UI element
810). This process repeats until all received envelopes are
stripped and data (e.g., the second portion) distributed to the
appropriate extension objects. If a hierarchy of extension objects
exists, each receiving level of extension object strips the data
encapsulated for that level. Incoming messages may include
extension object identifiers to indicate the recipient extension
objects. The extension object identifiers may cause the application
manager to load the extension objects. In the example of FIG. 8, UI
element 810 displays the received message as a UI response 812 to
the user.
Extending the Communications Framework through Extension
Providers
[0069] A communication channel between application programs running
on peer machines can be implemented through extension object
providers 108 so that additional extension objects 118 can be added
at a later stage to implement different means of establishing
connections, different means of authentication and different
mechanisms for data transfer. As discussed above, such extension
objects 118 are referred to as protocol adapters 208. Protocol
adapters 208 extend the design to handle different methods of
establishing and authenticating connections, different protocols of
data transfer, and to allow extension object providers 108 that add
UI functionality to determine their own transaction procedure to
exchange functionality specific messages. For example, the
transaction procedure for messages to allow peers to draw on a
shared whiteboard would be different from the procedure for file
sharing messages.
[0070] As shown in the FIG. 9, the transfer agent 112 is the
central framework object that handles all peer-to-peer
communication. The transfer agent 112 employs protocol adapters for
creating and authenticating connections as well as for performing
data input and output. For example, when a message created by an
extension provider 108 in a workspace 104 is received by the
transfer agent 112 to be sent to a specific user, the transfer
agent 112 determines that the user is a buddy on a specific instant
messaging (IM) server such as IM server A 903, IM server B 905, or
IM server C 907. The transfer agent 112 uses the appropriate
extension object that can establish a peer-to-peer connection to
the peer on the specific IM server. For example, if the user is a
buddy on IM server A 903, then IM A connection provider 902 is used
as the protocol adapter for sending the message the user.
Similarly, if the user is a buddy on IM server B 905, then IM B
connection provider 904 is used as the protocol adapter for sending
the message the user. Further, if the user is a buddy on IM server
C 907, then IM C connection provider 906 is used as the protocol
adapter for sending the message the user.
[0071] When the connection is established, the transfer agent 112
identifies the type of connection and loads the appropriate
protocol adapter extension object to handle the data transfer. For
example, if the transfer agent 112 determines the connection to be
a transmission control protocol/Internet protocol (TCP/IP) socket
connection (e.g., communicating with an external socket API 910),
the transfer agent 112 loads the appropriate extension object
(e.g., socket UI 908) for handling data input and output on socket
connections and uses it to handle the data transfer. The protocol
used for the exchange of data is defined in the message body that
was generated by the extension object provider 108 that provided
the specific functionality within the workspace 104.
[0072] If functionality is to be added later for the application
program to communicate with users on another specific IM server, an
extension object provider 108 could provide functionality through
protocol adapters to establish connections to an application
program on a peer machine if the peers are on the other specific IM
server. Similarly, if the type of connection is an HTTP network
connection, a different protocol adapter (e.g., HTTP IO 912) could
be instantiated (e.g., plugged in) to handle the data input and
output to communicate with an external HTTP API 914.
[0073] The database 110 in the application manager 106 stores
information on the registered extension object providers 108 for
peer-to-peer communication. For example, such information
associates the appropriate protocol adapters to be used for
transferring messages via specific protocols. Optionally, when
extension object providers 108 that provide a specific
functionality create messages, the extension object providers 108
can specify recommended, registered, communication protocol
adapters to be used for transferring those messages. Such
recommended protocol adapters supersede any default protocol
adapter used for communication or authentication.
Exemplary Operating Environment
[0074] FIG. 10 shows one example of a general purpose computing
device in the form of a computer 130. In one embodiment of the
invention, a computer such as the computer 130 is suitable for use
in the other figures illustrated and described herein. Computer 130
has one or more processors or processing units 132 and a system
memory 134. In the illustrated embodiment, a system bus 136 couples
various system components including the system memory 134 to the
processors 132. The bus 136 represents one or more of any of
several types of bus structures, including a memory bus or memory
controller, a peripheral bus, an accelerated graphics port, and a
processor or local bus using any of a variety of bus architectures.
By way of example, and not limitation, such architectures include
Industry Standard Architecture (ISA) bus, Micro Channel
Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics
Standards Association (VESA) local bus, and Peripheral Component
Interconnect (PCI) bus also known as Mezzanine bus.
[0075] The computer 130 typically has at least some form of
computer readable media. Computer readable media, which include
both volatile and nonvolatile media, removable and non-removable
media, may be any available medium that can be accessed by computer
130. By way of example and not limitation, computer readable media
comprise computer storage media and communication media. Computer
storage media include volatile and nonvolatile, removable and
non-removable media implemented in any method or technology for
storage of information such as computer readable instructions, data
structures, program modules or other data. For example, computer
storage media include RAM, ROM, EEPROM, flash memory or other
memory technology, CD-ROM, digital versatile disks (DVD) or other
optical disk storage, magnetic cassettes, magnetic tape, magnetic
disk storage or other magnetic storage devices, or any other medium
that can be used to store the desired information and that can
accessed by computer 130. Communication media typically embody
computer readable instructions, data structures, program modules,
or other data in a modulated data signal such as a carrier wave or
other transport mechanism and include any information delivery
media. Those skilled in the art are familiar with the modulated
data signal, which has one or more of its characteristics set or
changed in such a manner as to encode information in the signal.
Wired media, such as a wired network or direct-wired connection,
and wireless media, such as acoustic, RF, infrared, and other
wireless media, are examples of communication media. Combinations
of the any of the above are also included within the scope of
computer readable media.
[0076] The system memory 134 includes computer storage media in the
form of removable and/or non-removable, volatile and/or nonvolatile
memory. In the illustrated embodiment, system memory 134 includes
read only memory (ROM) 138 and random access memory (RAM) 140. A
basic input/output system 142 (BIOS), containing the basic routines
that help to transfer information between elements within computer
130, such as during start-up, is typically stored in ROM 138. RAM
140 typically contains data and/or program modules that are
immediately accessible to and/or presently being operated on by
processing unit 132. By way of example, and not limitation, FIG. 10
illustrates operating system 144, application programs 146, other
program modules 148, and program data 150.
[0077] The computer 130 may also include other
removable/non-removable, volatile/nonvolatile computer storage
media. For example, FIG. 10 illustrates a hard disk drive 154 that
reads from or writes to non-removable, nonvolatile magnetic media.
FIG. 10 also shows a magnetic disk drive 156 that reads from or
writes to a removable, nonvolatile magnetic disk 158, and an
optical disk drive 160 that reads from or writes to a removable,
nonvolatile optical disk 162 such as a CD-ROM or other optical
media. Other removable/non-removable, volatile/nonvolatile computer
storage media that can be used in the exemplary operating
environment include, but are not limited to, magnetic tape
cassettes, flash memory cards, digital versatile disks, digital
video tape, solid state RAM, solid state ROM, and the like. The
hard disk drive 144, and magnetic disk drive 156 and optical disk
drive 160 are typically connected to the system bus 136 by a
non-volatile memory interface, such as interface 166.
[0078] The drives or other mass storage devices and their
associated computer storage media discussed above and illustrated
in FIG. 10, provide storage of computer readable instructions, data
structures, program modules and other data for the computer 130. In
FIG. 10, for example, hard disk drive 154 is illustrated as storing
operating system 170, application programs 172, other program
modules 174, and program data 176. Note that these components can
either be the same as or different from operating system 144,
application programs 146, other program modules 148, and program
data 150. Operating system 170, application programs 172, other
program modules 174, and program data 176 are given different
numbers here to illustrate that, at a minimum, they are different
copies.
[0079] A user may enter commands and information into computer 130
through input devices or user interface selection devices such as a
keyboard 180 and a pointing device 182 (e.g., a mouse, trackball,
pen, or touch pad). Other input devices (not shown) may include a
microphone, joystick, game pad, satellite dish, scanner, or the
like. These and other input devices are connected to processing
unit 132 through a user input interface 184 that is coupled to
system bus 136, but may be connected by other interface and bus
structures, such as a parallel port, game port, or a Universal
Serial Bus (USB). A monitor 188 or other type of display device is
also connected to system bus 136 via an interface, such as a video
interface 190. In addition to the monitor 188, computers often
include other peripheral output devices (not shown) such as a
printer and speakers, which may be connected through an output
peripheral interface (not shown).
[0080] The computer 130 may operate in a networked environment
using logical connections to one or more remote computers, such as
a remote computer 194. The remote computer 194 may be a personal
computer, a server, a router, a network PC, a peer device or other
common network node, and typically includes many or all of the
elements described above relative to computer 130. The logical
connections depicted in FIG. 10 include a local area network (LAN)
196 and a wide area network (WAN) 198, but may also include other
networks. Such networking environments are commonplace in offices,
enterprise-wide computer networks, intranets, and global computer
networks (e.g., the Internet).
[0081] When used in a local area networking environment, computer
130 is connected to the LAN 196 through a network interface or
adapter 186. When used in a wide area networking environment,
computer 130 typically includes a modem 178 or other means for
establishing communications over the WAN 198, such as the Internet.
The modem 178, which may be internal or external, is connected to
system bus 136 via the user input interface 194, or other
appropriate mechanism. In a networked environment, program modules
depicted relative to computer 130, or portions thereof, may be
stored in a remote memory storage device (not shown). By way of
example, and not limitation, FIG. 10 illustrates remote application
programs 192 as residing on the memory device. It will be
appreciated that the network connections shown are exemplary and
other means of establishing a communications link between the
computers may be used.
[0082] Generally, the data processors of computer 130 are
programmed by means of instructions stored at different times in
the various computer-readable storage media of the computer.
Programs and operating systems are typically distributed, for
example, on floppy disks or CD-ROMs. From there, they are installed
or loaded into the secondary memory of a computer. At execution,
they are loaded at least partially into the computer's primary
electronic memory. The invention described herein includes these
and other various types of computer-readable storage media when
such media contain instructions or programs for implementing the
steps described below in conjunction with a microprocessor or other
data processor. The invention also includes the computer itself
when programmed according to the methods and techniques described
herein.
[0083] For purposes of illustration, programs and other executable
program components, such as the operating system, are illustrated
herein as discrete blocks. It is recognized, however, that such
programs and components reside at various times in different
storage components of the computer, and are executed by the data
processor(s) of the computer.
[0084] Although described in connection with an exemplary computing
system environment, including computer 130, the invention is
operational with numerous other general purpose or special purpose
computing system environments or configurations. The computing
system environment is not intended to suggest any limitation as to
the scope of use or functionality of the invention. Moreover, the
computing system environment should not be interpreted as having
any dependency or requirement relating to any one or combination of
components illustrated in the exemplary operating environment.
Examples of well known computing systems, environments, and/or
configurations that may be suitable for use with the invention
include, but are not limited to, personal computers, server
computers, hand-held or laptop devices, multiprocessor systems,
microprocessor-based systems, set top boxes, programmable consumer
electronics, network PCs, minicomputers, mainframe computers,
distributed computing environments that include any of the above
systems or devices, and the like.
[0085] The invention may be described in the general context of
computer-executable instructions, such as program modules, executed
by one or more computers or other devices. Generally, program
modules include, but are not limited to, routines, programs,
objects, components, and data structures that perform particular
tasks or implement particular abstract data types. The invention
may also be practiced in distributed computing environments where
tasks are performed by remote processing devices that are linked
through a communications network. In a distributed computing
environment, program modules may be located in both local and
remote computer storage media including memory storage devices.
[0086] In operation, computer 130 executes computer-executable
instructions such as those illustrated in FIGS. 6-9 to dynamically
configure an application program by integrating functionality
provided by one or more extension objects with the application
program during execution of the application program.
EXAMPLES
[0087] The following examples illustrate the invention. In one
embodiment, the application programs implementing the application
program framework 102 of the invention are communication-centric
peer-to-peer application programs. An application program on one
machine communicates and exchanges data with a similar application
program on another machine. The framework 102 provides a common
channel of communication that is leveraged by all extension object
providers 108 that extend the application program functionality.
Though this embodiment is specific to a peer-to-peer application
program, the application program framework 102, discovery of
extension object providers 108, and message formulation and routing
are applicable to any type of application program.
[0088] In another example, customers that design and manufacture
audio digital signal processing devices with audio effect
processing capabilities such as three dimensional process
acceleration, mixing, digital encoding/decoding, or object
acceleration could implement the application program framework 102
of the invention for audio drivers to expose hardware features as
individually controllable extension objects 118 in an operating
system environment. With more and more feature-rich audio devices
equipped with powerful digital signal processing capabilities, the
operating system audio stack implemented according to the invention
allows a third-party audio driver to expose these capabilities to
users in a coordinated way so that these capabilities are available
to all application programs on a computing device. An audio stack
according to the invention allows a third party to separate its
render function from other processing units (e.g., mixing). In
addition, an audio stack according to the invention allows a
third-party driver to partition hardware features into individual
extension objects 118. The application program framework 102 of the
invention provides more flexibility in the logical hardware feature
partitions.
[0089] When introducing elements of the present invention or the
embodiment(s) thereof, the articles "a," "an," "the," and "said"
are intended to mean that there are one or more of the elements.
The terms "comprising," "including," and "having" are intended to
be inclusive and mean that there may be additional elements other
than the listed elements.
[0090] In view of the above, it will be seen that the several
objects of the invention are achieved and other advantageous
results attained.
[0091] As various changes could be made in the above constructions,
products, and methods without departing from the scope of the
invention, it is intended that all matter contained in the above
description and shown in the accompanying drawings shall be
interpreted as illustrative and not in a limiting sense.
* * * * *