DECLARATIVE SPECIFICATION OF COLLABORATION CLIENT FUNCTIONALITY

Some embodiments may provide a method comprising accessing a first declarative specification element specifying a collaboration session context, accessing a second declarative specification element depending from the first declarative specification element. Some embodiments may further provide a method comprising generating, based on the first declarative specification element, first instructions to instantiate the collaboration session connection, generating, based on the second declarative specification element, second instructions, and generating sequencing instructions to prevent the second instructions from being executed until the collaboration session connection is instantiated.

DETAILED DESCRIPTION

In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of some example embodiments. It will be evident, however, to one skilled in the art that the present invention may be practiced in other embodiments without these specific details.

Embodiments may, for example, be implemented as a stand-alone application (e.g., without any network capabilities), a client-server application or a peer-to-peer (or distributed) application. Embodiments may also, for example, be deployed by Software-as-a-Service (SaaS), Application Service Provider (ASP), or utility computing providers, in addition to being sold or licensed via traditional channels.

INTRODUCTION

For the purposes of this specification, the term “electronic content” shall be taken to include any digital data that may be presented to a user (e.g., visually or audibly presented) and may include for example an electronic document, page-descriptive electronic content such as a page-descriptive electronic document, media stream, web page, hypertext document, declarative specification document, image, digital video or video recording, digital audio or audio recording, an animation, a markup language document, such as for example a hypertext markup language HTML or XML document, a fillable form or data describing application graphical user interface. A “content element” shall include any part or share of electronic content that is defined or discernable as a part or share. For example, a content element may be automatically discerned from a characteristic of the content element itself (e.g., a paragraph of an electronic document) or may be manually defined by a user (e.g., a user-selected collection of words in an electronic document, a user-selected portion of a digital image). Examples of content elements include portions of a page-descriptive document or other electronic document, such as, for example, pieces of electronic text or other material within the electronic document, portions of media streams such as sections of digital video or frames or sets of frames of digital video or digital audio, segments or frames of animations, electronic forms, form templates, form elements, form data, actuatable element specifications or instructions, and various elements presentable or accessible by users within electronic content, and the like. Content elements may include empty content, for example an electronic document may include a blank page; the content of the blank page, namely any data indicating its blankness, may in some embodiments be considered as a content element, namely an empty content element. Content elements may include format data such as, for example, position information describing the placement of other content element(s), or information specifying colors or fonts to be used in rendering other content element(s).

For the purposes of this specification, a content item may be “associated” with electronic content. Examples of such association include inclusion within a file or other data structure containing the electronic content, the presence of a direct or indirect reference to the content element within electronic content, or the presence of a data structure, file, or other mechanism by which a content element is associated with electronic content. The association of a content element with electronic content does not necessarily require that when the electronic content is presented (or otherwise made accessible to a user or as input to a machine), that the content element is, in the course of presentation or access, also presented or made accessible.

In considering the association between electronic content and an associated content element, the term “literally included” may be used. In this specification, electronic content may, for example, literally include a content item if the data structure that contains the data that largely describes the electronic content includes the data that largely describe the content element. In some embodiments, a content element may be associated with electronic content by reference, wherein the data that describes the content element is not directly contained within or integral with the data that describes the electronic content with which the element is associated.

For the purposes of this specification, the term “rendering” used as a verb includes presenting or making accessible electronic content or content elements to be perceived, viewed, or otherwise experienced by a user, or be made available for further processing, such as, for example, searching, digesting, printing, analyzing, distilling, or transforming by computational processes that may not include processing the intrinsic data structure describing the electronic content or content element. Whether a content element associated with an electronic content is included in the rendering of the electronic content may, by default, be determined by whether or not the content element is active.

For the purposes of this specification, the term “rendering” used as a noun includes human-perceivable representations of data that is within a machine and perception-specialized organizations of data defining such representations. For example, a rendering may include a pattern of human-perceivable matter or energy presented on an output device by a machine, as well as the organization of data within a machine specialized to define such patterns. For example, such organizations of data may include the electronic configuration of a memory used by a graphics display processor, or a file containing an audio segment suitable for playing via an audio system of a computer.

Certain applications or processes are described herein as including a number of modules or mechanisms. A module or a mechanism may be a unit of distinct functionality that can provide information to, and receive information from, other modules. Accordingly, the described modules may be regarded as being communicatively coupled. Modules may also initiate communication with input or output devices, and can operate on a resource (e.g., a collection of information). The modules may include hardware circuitry, optical components, single or multi-processor circuits, memory circuits, software program modules and objects, firmware, and combinations thereof, as appropriate for particular implementations of various embodiments. The term “module” includes an identifiable portion of code, data, or computational object to achieve a particular function, operation, processing, or procedure.

For the purposes of this specification, the term “portion” may be taken to include any part, component, subset, data structure, or other part included properly or improperly within an electronic content.

For the purposes of this specification, the term “event listener” may include software, hardware, programs, modules, or other computational artifacts adapted to or capable of detecting and/or recording one or more events, such as within the context of a graphical user interface, or events announced or indicated by a machine remote to a machine upon which an event handler is active.

For the purposes of this specification, the term “declarative” may include specifying that an affordance or rendering described by a particular data structure may have a particular characteristic without specifying how that characteristic is to be brought about in the rendering or development of the resulting data from the data object.

For the purposes of this specification, the term “electronic document” may be taken to include various types of data structures that represent printable artifacts in which an on-screen rendering of the data structure substantially corresponds to the printed version of the data structure.

For the purposes of this specification, a first textual element may be said to “semantically contain” a second textual element when, for example, a first textual element signifies the presence of a portion of electronic content, associated with the first textual element, where the second textual element includes content that is included in the portion of electronic content. For example, in an Extensible Markup Language (XML) representation, a tag name may semantically contain the tag's attributes and XML text between the start and end tags using the tag name.

Some embodiments relate to systems and methods for declarative specification of collaboration client functionality. For example, the programmer or other software developer may wish to develop a new type of client to permit multiple users to collaborate within a collaborative environment (which, in some embodiments, may be termed a “collaborative room”) while working remotely. In some embodiments, a central server (e.g., collaboration server) may handle the reception and transmission of data among the various client machines to facilitate collaborative communication among users. For example, suppose for purposes of example that one copy of collaboration client running on machine A and another copy is running on machine B. If both clients are to display a shared whiteboard, an operation of drawing on a shared whiteboard widget by a user of Machine A, a description of the drawing may be transmitted to the collaboration server and in turn to Machine B, where the drawing may be replicated on a display of machine B to provide a shared whiteboard experience among the user of Machine A and Machine B. Similar data transmission and redistribution from one client machine to other client machines in the collaboration may be carried out with respect to other types of affordances such as, for example, video streams captured by video cameras, shared files, and other components.

In some embodiments, to facilitate the participation of a user in a collaborative session with other users of other machines, a collaboration client (e.g., an application or other computational object to facilitate the client-side operations used to facilitate a collaboration session for a user) may carry out a number of operations. For example, the collaboration client may connect to the collaboration server and transmit to the collaboration server an indication of the collaboration session which the user wishes to join and authentication credentials such as, for example, a username and password. Once connected to the collaboration session, as provided by the collaboration server, the collaboration client (e.g., running on the user's local machine) may request the collaboration server to provide various details about the collaboration session. Such details or other data may include, for example, a list of current participants, video or audio streams, shared whiteboards, shared files and other attributes or resources of the collaboration sessions.

These attributes or resources may be used by a collaboration client to initialize various graphical user interface (GUI) affordances as rendered on the client machine. These attributes or resources may also be used by the collaboration client to receive data from the collaboration server relayed from other participants and to transmit the user's actions, images and the like to the collaboration server for re-transmission to the other participants' machines in the collaboration session.

In some embodiments, a collaboration client may include a number of components. For example, the collaboration client may include a module for contacting and communicating with a remote server. In addition, in some embodiments, the collaboration client may include one or more components corresponding to the various affordances displayed or rendered to the user. For example, the collaboration client may include a video player widget which may receive video stream from a collaboration server or alternatively transmit video stream provided by the user (e.g., captured by a local video camera) to a collaboration server while rendering the retrieved or transmitted video stream in a region of a GUI presented to the user by the collaboration client.

In some embodiments, a developer or other programmer may use a declarative specification such as in the form of an electronic document or other electronic content. The declarative specification may declaratively specify the collaboration session connection process. The declarative specification may also declaratively specify the various components that are able to transmit or receive collaborative data to or from the collaboration server and display such data on the GUI provided by the collaboration client. In those embodiments, a parser (or other processing tool) may accept the declarative specification provided by the user that declaratively specifies the connection and functionality of some or all of the collaboration client and produce instructions (e.g., source code and/or object code) to implement that functionality. In such embodiments, the collaboration client developer need not specify procedural source code or other imperative programming to carry out that functionality.

For the purposes of this specification, the term “collaboration session” may be taken to include any suitable temporal period in which two or more computers are in state of communication during which the actions of a user of one machine are rendered or presented to the user of the other machine in substantially real time.

For the purposes of this specification, the term “collaboration session connection” may be taken to include any suitable connection between two machines or computers that once established, may be used for, or facilitate a collaboration session implemented by the computers. For the purposes of this specification, the term “collaboration session context” may be taken to include aspects of a collaboration session (e.g., including the network connection to a collaboration server and session) that may be gathered and made available to a collaboration client, and that describe attributes and resources of the collaboration session used by components or widgets of a collaboration session to facilitate interaction between a collaboration client user and other collaboration participants via a collaboration server.

For the purposes of this specification, the term “declarative specification element” may be taken to include any content element, indication, or data item that declaratively specifies a procedure, process, module, component or other data processing artifact.

For the purposes of this specification, the term “instructions” may be taken to include any machine-readable instructions, whether executable directly as presented, or parseable or interpretable into machine-executable instructions. For purposes of this specification, “instructions” may include source and/or object code, software libraries, binaries, or other program objects. For the purposes of this specification, “executing instructions” may be taken to include both direct execution of instructions by a computer, as well as execution of instructions compiled, parsed, or interpreted into machine-executable code. For the purposes of this specification, the execution of instructions may be taken to include either executing instructions directly, or may be taken to include executing a series of machine-executable operations (e.g., object code) produced from or otherwise implementing the instructions that are not directly machine-executable (e.g., source code).

For the purposes of this specification, the term “instantiate” may be taken to include creation, initiation, and/or execution of an instance of data object or other computational or data processing element.

For the purposes of this specification, the term “sequencing instructions” may be taken to include instructions which may be used to control the sequence of execution of other instructions. For example, in some embodiments, sequencing instructions may be taken to include instructions that may determine control flow among modules or instructions, such as to control initiation or commencement of processing by instructions upon or according to satisfaction of some conditions.

For the purposes of this specification, the term “markup language tag” may be taken to include a tag or other hierarchical data element used within a markup language or a markup language electronic document.

For the purposes of this specification, the term “nested within” such as when applied to a second specification element nested within a first specification element, may be taken to include a configuration wherein the sequence of characters comprising the second specification element is completely surrounded by characters representing the first specification element.

For the purposes of this specification, the term “identification of a collaboration server” may be taken to include any suitable address (e.g., an Internet Protocol (IP) address), locator (e.g., uniform resource locator (URL)), location or other data by which a collaboration client may locate or contact a collaboration server.

For the purposes of this specification, the term “real-time collaboration container” may be taken to include a configuration of data within a client machine running a collaboration client with configuration of data describing a collaboration session with a collaboration server. In some embodiments, a real-time collaboration container may include context of the collaboration session within which the participants are meeting, such as, for example, its virtual location as represented by a uniform resource locator (URI), privacy restrictions of the session, and roles of the participants or users of the session.

For the purposes of this specification, the term “asynchronous operation” may be taken to include an operation whose execution results in the receipt of a response, in which the response may take an indeterminate amount of time to be received after the operation. For example, a communication between two machines, where the timing of the communication is subject to latency or is otherwise not under the control of either machine may be considered an asynchronous operation.

Example Systems for Declarative Specification of Collaboration Client Functionality

FIG. 1is a block diagram illustrating a system100, including modules and components supporting computer-mediated collaboration, according to an example embodiment.

The system100as shown in the example diagram ofFIG. 1, three collaboration machines, collaboration machine102, collaboration machine124, and collaboration machine126are illustrated as being connected with one another and with a collaboration server122via a network120. Within the collaboration machine102(as well as, e.g., other collaboration machines illustrated), a number of modules may be present. For example, a collaboration machine102may include a parsing module104, a data access module106, and a runtime module118. In some embodiments, the runtime module118may be used to run a collaboration client such as, for example, by executing instructions in the form of source or object code. In some embodiments, the parsing module104may generate instructions based on declarative specification element, while a data access module106may be used to access declarative specification elements.

The system100may also include a data store108which may, in some embodiments, take the form of a hard disk, file system, flash memory, random access memory or other storage media or components. The data access module106may mediate access to the data store108for the parsing module104or runtime module118. The data store108is illustrated as including declarative specification110, which may include first declarative specification element and the second declarative specification element. In addition, the data store108may contain instructions112to be used to provide collaboration client functionality. Instructions112may include first instructions114and second instructions116. The first instructions114may describe the instantiation of a collaboration session connection and construction of a collaboration session context. The instructions112may be stored in a single file, or one or more files. The instructions112may further includes sequencing instructions to prevent second instructions116from being executed until the collaboration session context is instantiated according to the first instructions114.

It will be appreciated that the runtime module118may serve to connect the collaboration machine102to the collaboration server122through the network120. The runtime module118may include various data objects or components for receiving and transmitting collaboration data to the server122and/or displaying renderings of collaboration data to a graphical user interface.

The operation of the runtime module118and the structure and characteristics of the declarative specification110and instructions114and116are described in more detail below.

Example Declarative Specifications

FIG. 2is a diagrammatic illustration of a declarative specification202such as may be included within an electronic document for declaratively specifying collaboration client functionality, according to an example embodiment. The declarative specification202may be included in an electronic document or other file or files.

The declarative specification202may include a number of specification elements such as in the form of Extensible Markup Language (XML) or other markup language tags. The specification elements that may be used to declaratively (e.g., either partially or fully) specify a collaboration client. For example, inFIG. 2, an “Application” tag may serve to specify a collaboration client application as a whole. Such a top level “Application” tag is indicated in the example ofFIG. 2by the dashed rectangle208. In some embodiments, a “layout” attribute may be included, such as to indicate whether the layout of various graphical user interface (GUI) components or widgets is to be automatically determined by the application or (such as in the case of the example ofFIG. 2) internally specified by declarative specifications of the widgets themselves.

Semantically contained in, subordinate to, or in the example ofFIG. 2nested within the application tag208, a “ConnectSession” tag (indicated by the rectangle210) may be placed. The “ConnectSession” tag210may be used to declaratively specify or describe a connection session to a collaboration server such as, for example, the collaboration server122ofFIG. 1. Returning toFIG. 2, This “ConnectSession” tag210may, in some embodiments, include a locator or other indication for the location or identification of the collaboration server such as, for example, inFIG. 2, “server.abcdef.com/s12345”.

In addition, the declarative specification202may include declarative specifications of one or more graphical user interface (GUI) components that may be used within a collaboration client to display shared data. For example, the declarative specification202includes a whiteboard declarative specification element, a web camera record/display declarative specification component, and a chat widget declarative specification element. For example, the chat widget declarative specification, indicated by the dashed rectangle212, may include attributes specifying the characteristics of the chat widget to be displayed by the collaboration client such as, for example, a width or height in pixels or other display size units.

It will be appreciated that the chat widget specification element212and other declarative specification elements describing other widgets or components may be semantically contained by, nested within or otherwise subordinate either directly or indirectly to the connect session declarative specification element, in the example ofFIG. 2, connect session tag210. The arrangement of specification elements in such a nested configuration may permit a collaboration client programmer or developer to indicate that the components or widgets represented by the component declarative specification elements may be contained within the collaboration session declaratively specified by the connect session tag210. It will be appreciated that in keeping with the declarative nature of the specification202, the actual procedural or algorithmic specification of the processes by which a collaboration client may connect to a collaboration server, such as collaboration server122, and instantiate or operate various widgets or components need not be specified within the declarative specification such as specification202. The specification202may serve as an input for further processing such as, for example, a parsing module104, which may access the declarative specification202via data access module106.

In some embodiments, a declarative specification may include references to libraries, scripts, or other resources that may be used in parsing the specification elements or generating instruction based on the specification elements.

It will be appreciated that a wide variety of markup language syntax or construction may be used to declaratively specify widgets, components, collaboration session context instantiation, and other collaboration client operations and objects.

Systems and Processes for Parsing Declarative Specifications and Declarative Specification Elements

FIG. 3is a diagrammatic illustration of a process for parsing or otherwise processing a declarative specification that may include first and second declarative specification elements, according to an example embodiment.

Once a programmer or other developer produces a declarative specification describing all or part of a collaboration client such as, for example, declarative specification308(e.g., declarative specification202ofFIG. 2), a parser (such as, for example parsing module104or other markup language processing tool) may be applied to the declarative specification308. As indicated inFIG. 3, the declarative specification may include a first specification element such as, for example, specifying the collaboration session as a whole, as well as subordinate or nested specification elements which may describe collaboration client user interface widgets or components.

In some embodiments, a parsing module104or other processing tool may carry out a parsing, interpreting or other code generation process as illustrated diagrammatically by the generation arrow310. Output of this process may be a file312or in some embodiments multiple files including imperative or procedural code or instructions that may be executed, or in some embodiments further edited and compiled into a machine code that serve to implement the collaboration client functionality specified declaratively in a specification308. In some embodiments, a parsing module104may make use of a data access module106running on the collaboration machine102to retrieve, from a data store108, the declarative specification308(e.g., specification110ofFIG. 1) and to output one or more instruction files312(e.g., files containing instructions112ofFIG. 1). The resulting file312which may, in some embodiments, in the form of multiple files, may include (within a single file or among multiple files) first instructions314which may include instructions for instantiating a collaboration session context. The output of the parsing process may also include second instructions316which may serve as instructions for instantiating and/or operating a graphical user interface component or other component or widget made by the collaboration client specified by specification308. In addition, the resulting file or files312may include sequencing instructions that may prevent the second instructions316from being executed until the collaboration session context is instantiated such as by the operation of the first instructions314.

As noted above with respect toFIG. 2, the first declarative specification element and the second declarative specification element may include or be implemented by markup language tags. It will be further appreciated that the generation of the sequencing instructions to prevent the second instructions from being executed until a collaboration session context is instantiated by the first instructions, may be reflective of the subordinate or nested configuration of the second declarative specification element.

It will be appreciated that a wide variety of different components or widgets may be provided by a collaboration client or may be specified. Such components or widgets may be specified by declarative specification elements indicated diagrammatically within the declarative specification308. For example, collaboration client components which may be specified by declarative element specification and created according to second instructions generated from a declarative specification element, may include a video player, a shared whiteboard, an audio player widget, a multi-user chat widget, a multi-user note-taking widget, a roster list (e.g. to indicate the users present in the collaboration session), a file sharing drop box widget, polling widget, a shared mapping component, a shared presentation component such as, for example, for presenting online slide presentations, shared document review widget or a shared musical instrument. It will be appreciated that these various widgets may make use of the collaboration session context during the operation of these components or widgets, such as by the execution of the instructions generated from the declarative specification of such components or widgets.

As noted with respect to declarative specification202ofFIG. 2, the declarative specification element specifying a collaboration session context to be established, such as, for example the connect session tag210ofFIG. 2may include an identification of a collaboration server such as the collaboration server122. The first instructions that may be generated by the parsing module104based on the declarative specification element specifying a collaboration session context, may include instructions operable to create a real time collaboration container. The first instructions may include synchronous operations as described below with respect toFIGS. 5 and 6.

Processes for Accessing Declarative Specification Elements and Generating Instructions

FIG. 4shows a flow chart of a process400for accessing specification elements and generating instructions based on those specification elements, according to an example embodiment.

The process400may, in some embodiments, begin with the accessing of a first declarative specification element specifying collaboration session context at block402. This accessing may be carried out, in some embodiments, by the data access module106operating to access the data store108such as in response to a request by the parsing module104. Accessing the first declarative specification element may, in some embodiments, be carried in the context of accessing a declarative specification for a collaboration client such as, for example, the declarative specification202. As described above, the first declarative specification element may, in some embodiments, take a form of an XML or other markup language tag such as, for example, the connect session tag210ofFIG. 2.

At block404, second declarative specification element that depends from the first declarative specification element may be accessed. This accessing may be carried out in response to a request by a parsing module104with the access being carried by the data access module106. The second declarative specification element may depend from first specification element such as, for example, by nesting as a containment or other form of dependency in which the second declarative specification element depends from the first declarative specification element. It will be appreciated that, in some embodiments, such dependency or nesting may occur to multiple levels. In some embodiments, this second declarative specification element may specify a video player widget, a shared whiteboard widget or other types of graphical user interface and non-graphical user interface components within a collaboration client.

At block406, first instructions to instantiate a collaboration session context may be generated based on first declarative specification. In some embodiments, this generation may be carried out by the parsing module with output, in some embodiments, stored into the data store108such as by the use of the data access module. In some embodiments, the first instructions may include a number of asynchronous operations by which a collaboration client may communicate with a collaboration server, for example, collaboration server122. These operations, described by first instructions to instantiate a collaboration session context, may include operations for connecting to the server, authenticating a user login against the server, requesting details about the type of collaboration session such as, for example, private, open or other types, receiving responses from collaboration server122, and accepting responses to these various operations. In some embodiments, the operations described by the instructions generated from or based on the first declarative specification element, may also include receiving a list of currently logged-in users to the collaboration session and receiving response requesting a set of audio or video sessions or streams and receiving response, requesting a set of published files displayed on that session and receiving response. It will be appreciated that, in some embodiments, first instructions generated based on the declarative specification element may be based on or depend on the types of components or widgets to be provided by the collaboration client.

At block408, second instructions may be generated based on the second declarative specification element. Second instructions may, in some embodiments, be generated by the parsing module104stored into the data store108such as by use of the data access module106. The second instructions, in some embodiments, code the instantiation, operation and/or user interaction with a collaboration server122and may make use of the collaboration session context instantiated by the operation of the first instructions (e.g., as generated in block406).

At block410, sequencing instructions may be generated to prevent second instructions from being executed until the collaboration session context is instantiated. In some embodiments, the operations at block410may be carried out by the parsing module104and stored into the data store108by the use of the data access module106. In some embodiments, the sequencing instructions may be included within the first instructions so that the instantiation or creation of the data objects used in the operation of the collaboration client widgets is delayed until the completion of the collaboration section connection instantiation. In some other embodiments, the sequencing instructions may be generated as part of the second instructions to cause the execution of the second instructions to be delayed until the collaboration section connection is instantiated. In some other embodiments, the sequencing instructions may be generated into or stored in a file section or source code or other data structure separate from either the first instructions or the second instructions.

Example embodiments describing the operations coded by or implemented by the first and second instructions are described in further detail with respect toFIGS. 5 and 6.

In some embodiments, the generation of the first instructions, second instructions, and sequencing instructions may be carried out by a parser adopted to parse or otherwise process markup language files or other declarative specifications. In some other embodiments, an interpreter may be used or some other text or structured document processing tool. It will be appreciated that, in some embodiments, the instructions generated may be in the form of source code that, accordingly, may be further processed into a form executable by a machine.

Example Processes for Execution of Generated Instructions by a Collaboration Machine

FIG. 5is a flow chart illustrating a process500for instantiating a collaboration session context and creating widgets or other components within a collaboration client, according to an example embodiment.

FIG. 5shows a process500which, in some embodiments, may be carried out by a collaboration client running on a collaboration machine102. The operations illustrated inFIG. 5may, in some embodiments, be carried by a runtime module118by executing instructions either directly via an interpreter or indirectly as compiled by a compiler or other tool, the instructions having been generated at block406,408and410ofFIG. 4.

At block502, which is illustrated inFIG. 5to encompass a number of other operations, the first instructions to instantiate a collaboration session context may be executed. These instructions may be generated based on the declarative specification element specifying a collaboration session context.

Within the processing illustrated in block502, the collaboration client may connect to the server and authenticate the user to log into a collaboration session at block503. It will be appreciated that this may be carried out, in some embodiments, by communication of the runtime module118with the collaboration server122via the network120. Further processing, that may in some embodiments take place within or near that of block503, may include request for and/or retrieval of various settings about the collaboration session or “room” such as for example bandwidth settings (e.g., upload and download speeds at which the room is optimized to run), public/private settings (e.g., whether guest users are allowed and whether guest users need permission from a host before connecting or entering the session), and/or user limit settings (e.g., a count of how many participants at maximum are allowed logged into a session or room). In some embodiments, the collaboration session instantiation instructions may broker the transmission of a guest login request and may await acceptance before allowing the collaboration component widgets (e.g., processing at block514) to proceed for that guest login.

Once the processing at block503is completed, a number of further processing steps may be carried out according to the first instructions. For purposes of illustration, for example, operations are illustrated in blocks504,506,508and510.

At block504, the collaboration client may request and receive details about the type of the collaboration session that the collaboration client has logged into. At block506, the collaboration client may request and receive details about the other users logged into the collaboration session such as a roster of currently logged-in users. At block508, the collaboration client may request and receive a set of audio and video streams available in the collaboration session. Such requesting and receiving may, in some embodiments, be made when a video and/or audio widget or component is to be provided by the collaboration client. At block510, the collaboration client may request and receive a set of files available in the collaboration session for shared viewing and/or editing.

In addition to and/or instead of operations illustrated in blocks504,506,508and510, in some embodiments, different operations to receive collaboration session information may be specified by the first instructions. Accordingly, additional operations may be carried out as represented by the ellipses512.

In some embodiments, the request and receive operations of blocks504,506,508and510may be carried out serially in the sense that execution of the first instructions as a whole are blocked until a response to request is received, such as from the collaboration server122. In some embodiments, such as those suggested by the parallelism in the flow chart ofFIG. 5, the requests for the various pieces of information from the collaboration server122may be carried out in an asynchronous, parallel or multi-threaded process. For example, in some embodiments, a data object that requests details about a type of collaboration session may be created and run on a separate thread of execution from the thread of execution running the main first instructions execution. The separate thread may then transmit a request about the type of collaboration session to the server and wait to receive a response, independently from the request for other information from the collaboration server122.

Once each of the various request/receive processing illustrated in block504,506,508and510, is successfully completed, the collaboration client may determine that the collaboration session context has become instantiated. At this point, sequencing instructions may permit the execution of second instructions to create the various widgets or components that use or depend upon the collaboration session context. Thereupon, the collaboration client may execute the second instructions to create the various widgets or other components that may, for example, make use of the collaboration session context. The execution of the second instructions is illustrated inFIG. 5at block514. Once the operations at block514have been carried out, further collaboration and transmission of data to and from the collaboration server by the various widgets or other components within the collaboration client may be carried out to facilitate the collaboration session among users. It will be appreciated that sequencing instructions, such as the sequencing instructions generated at block410(although not shown inFIG. 5) may be used to prevent the second instructions from being executed, such as at block514, until the collaboration session context is instantiated. Such instantiation may, in some embodiments, include the determination by a thread of control associated with the first instructions that the various request received operations illustrated at504to512have all successfully completed.

FIG. 6is a flow chart of a process600for instantiating collaboration session context, for example, by the execution of instructions based on the first declarative specification element specifying a collaboration session context, according to an example embodiment.

FIG. 6illustrates an example of the interaction between a collaboration client, which may be running on a collaboration machine102, and a collaboration server such as, for example, collaboration server122. The operations illustrated on the collaboration client-side ofFIG. 6may, in some embodiments, be carried out by the collaboration client by executing the instructions generated based on the declarative specification element (e.g., connect session tag210ofFIG. 2) specifying the collaboration session context. At block602, the collaboration client may contact the collaboration server and transmit session and login information such as, for example, an indication of the collaboration session that the user wishes to log in to as well as user credential such as, for example, a username and/or password. The collaboration client main thread may then keep or otherwise wait for a response from the collaboration server. In some embodiments, the instructions being executed by the collaboration client to establish the collaboration session context may include a function callable by remote procedure call by the collaboration server.

At block604, having received the session and login information from the collaboration client, the collaboration server may locate the session or authenticate the client. In response, the successful session location and authentication, a collaboration server may call, in some embodiments, a login receipt function on the client such as, for example, by remote procedure call. Once this remote procedure call has been received by the collaboration client, processing may continue at block606.

In some embodiments, at block606, one or more manager objects may be created within the collaboration client. These manager objects may execute on a separate thread of control from the main collaboration section connection thread, in some embodiments, in an asynchronous manner. These manager objects may include, in some embodiments, a remote procedure callable function callable by the collaboration server. In some embodiments, the manager objects may include event listeners to detect the transmission of data from the collaboration server. In addition, in some embodiments, the manager objects may include a flag indicating whether the manager object has received its requested data from the collaboration server.

In response to the asynchronous communications from the various manager objects for various session data, the collaboration server at block608may publish the session data and invoke the manager objects with that data such as, for example, via a remote procedure call (RPC) or via an event listening mechanism. The multi-threaded or parallel nature of the requests and responses by a publish and subscribe mechanism of data between the collaboration server and manager objects are illustrated by the multiple control flow lines607and612.

At block610, the various manager objects may asynchronously be populated with the session data according to their requests and thus may be considered to be completely constructed. Once each manager object is completely constructed, it may set its ‘ready’ flag to true and its associated thread may terminate.

Meanwhile, the main execution thread of the collaboration session context processing may continue to decision box613. At decision box613, a determination may need to be made whether all of the manager objects are completely constructed and populated with session data. If they are not all completely constructed, processing may continue at block614to prevent the second instructions (e.g., instructions for creating and/or operating widgets or other components within the collaboration client) from being executed. On the other hand, if all the manager objects are ready at decision box613, processing may continue to block616.

At block616, the collaboration session may be determined to have been created and, in some embodiments, the collaboration client may then create and run child objects. Such child objects, for example, may be objects representing collaboration components specified, for example, as element specifications and taken as children in the sense of being nested or otherwise subordinate to the connection session element specification in the declarative specification of the collaboration client. In some embodiments, these various child widgets or other components in the collaboration client may be asynchronously run on separate child threads (e.g., in a multithreading arrangement) of the collaboration session context instantiation thread.

In some embodiments, the various pieces of session information and session resources obtained by the manager objects such as, for example, video streams, may be stored in a location accessible to the various objects implementing the widgets or other components.

In some embodiments, the manager objects, such as those created in block606, may be stored in a dictionary, queue, or other data structure, which may then be processed or scanned, such as at decision box613, to determine whether the manager objects are completely constructed, for example, are created and successfully received their associated session data from the collaboration server.

In some embodiments, the manager objects may be responsible for gathering data describing the collaboration session context. Such context-describing data may include files, users logged into the session, data streams available within the session, collaboration session (e.g., “room”) settings, and the like. Accordingly, the collaboration session context by be considered created and fully ready when all the manager objects finish receiving the context data for the collaboration session.

Example Graphical User Interfaces for Collaboration Session Clients

FIG. 7is a diagrammatic illustration of a graphical user interface that may be presented by a collaboration client during the collaboration session connection process, according to an example embodiment.

InFIG. 7, a collaboration client user interface window702is illustrated. This collaboration window may be presented to a user by a collaboration client, which may be running on a collaboration machine102. In the state illustrated inFIG. 7, the collaboration client may have just received a selection of a username and password or other credentials and is attempting to connect to a collaboration server122. The status of the connection process may be indicated by legend704to indicate to the user that the connection to the server and an identification of the collaboration session server to which the connection attempt is being made.

FIG. 8is a diagrammatic illustration of a collaboration client graphical user interface as it may appear once a collaboration session is established and various widgets or other components provided by the collaboration client are created, have rendered their graphical user interfaces, and are successfully communicating with a collaboration server, according to an example embodiment.

InFIG. 8, the example collaboration client user interface window702introduced inFIG. 7is illustrated as it might appear at a later point in time when rendered by a collaboration client specified by a declarative specification such as, for example, specification202ofFIG. 2.

It will be appreciated that the collaboration client may include a shared whiteboard including a drawing area804and a toolbar806. The toolbar is illustrated as including a drawing tool808, an eraser tool810and an undo and redo tools812and814respectively.

In addition, the collaboration client graphical user interface may include a web camera widget including a web camera display window816and a camera activation button818. The camera activation button818may be used by the user of the collaboration client to broadcast a stream video to the collaboration server122to be propagated to other collaboration clients, such as running on collaboration machines124and126.

The example collaboration client user interface window702may also include a chat widget. The chat widget may include a chat dialogue display window820, a text entry area822and a send message button824. In some embodiments, the chat widget may receive chat text from other users transmitted via the collaboration server122and may, in turn (e.g., when the user presses the send button824) transmit text entered by the user along with user identification information to the collaboration server122. The entered text may then be propagated to other collaboration machines.

It will be appreciated that a variety of other collaboration client widgets or other tools or affordances may be available including audio and video streams, collaboration participant rosters, polling tools and the like.

Example Hardware and Computer Systems for Implementing Example Processes

The example computer system900includes a processor902(e.g., a central processing unit (CPU), a graphics processing unit (GPU) or both), a main memory904and a static memory906, which communicate with each other via a bus908. The computer system900may further include a video display unit910(e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)). The computer system900also includes an alphanumeric input device912(e.g., a keyboard), a user interface (UI) navigation device914(e.g., a mouse), a disk drive unit916, a signal generation device918(e.g., a speaker) and a network interface device920.

The disk drive unit916includes a machine-readable medium922on which is stored one or more sets of instructions and data structures (e.g., software924) embodying or utilized by any one or more of the methodologies or functions described herein. The software924may also reside, completely or at least partially, within the main memory904and/or within the processor902during execution thereof by the computer system900, the main memory904and the processor902also constituting machine-readable media.

The software924may further be transmitted or received over a network926via the network interface device920utilizing any one of a number of well-known transfer protocols (e.g., HTTP).