协作系统中虚拟工作空间视口的跟随模式和位置标记的制作方法

文档序号:13561307阅读:213来源:国知局
协作系统中虚拟工作空间视口的跟随模式和位置标记的制作方法

相关申请

要求于2015年5月6日提交的题为“用户共享工作空间中视口(viewport)模拟的系统和方法”的美国临时申请no.62/157911权利,该申请通过引用并入本文。

如同在本文完整阐述的那样,通过引用并入以下共同拥有的共同未决美国专利申请,即2013年11月26日提交的题为“包括空间事件映射的协作系统”的美国申请no.14/090,830(律师卷号no.hawt1011-2)。

所公开的技术涉及用于数字协作的装置、方法和系统,更特别地涉及便于多个并发用户访问全局工作空间数据的数字显示系统。



背景技术:

数字显示器通常以与白板类似的方式,被用于交互式演示和其他目的。一些显示器已联网并且可以用于协作,使得对一个显示器上的显示图像的做出的修改被复制在另一个显示器上。协作系统可以被配置成运行协作会话,在该会话中,位于不同客户端平台的用户共享一个工作空间,该工作空间例如是我们于2013年11月26日提交的题为“包括空间事件映射的协作系统”的共同未决的美国申请no.14/090,830(us2014-0222916-a1,公开于2014年8月7日)。这种系统的分布式特性允许不同地方的多个用户同时在同一个工作空间中进行数据交互和改变,并且还可以在没有其他用户观察工作空间的时候进行。此外,工作空间可以非常大,在一些系统中基本上是无约束的。

一个与使用大型工作空间的协作系统相关联的问题,涉及工作空间周围的导航。因为工作空间基本上可以是无约束的,而且用户可以将图形对象放置在工作空间的任何位置,所以可能很难发现并跟踪由协作者正在完成的工作。



技术实现要素:

公开了一种支持对多个协作会话进行存储和跟踪的系统,每个协作会话可以跨多个设备和位置而访问。所公开的技术包括一种方法,其用于一个客户端在其显示器上查找和跟踪由另一个客户端在共享工作空间内所生成的业务。

本文描述的一个系统,其包括一个或多个数据处理器,该数据处理器包括存储用于数据库的计算机程序的存储器,该数据库包括用于对应的工作空间的一个或多个工作空间数据结构。工作空间数据结构可以包括用于特定工作空间的空间事件映射。

所描述的系统包括第一网络节点,该第一网络节点包括具有物理显示空间的显示器,用户输入设备,处理器和通信端口。第一网络节点可以配置有用来建立与一个或多个其他网络节点的通信的逻辑,该其他网络节点可以包括例如服务器侧网络节点和对等客户端侧网络节点,以作为工作空间会话中的参与者客户端。第一网络节点可以具有存储器,或者可以访问存储器,以存储标识在工作空间会话中所使用的虚拟工作空间中具有位置的图形目标的协作数据。协作数据可以是如本文所描述的包括相应图形目标在虚拟工作空间中的位置的空间事件映射,或者其他类型的数据结构。该系统中的第一网络节点具有用来限定在工作空间内具有位置和尺寸的本地客户端视口,并且将本地客户端视口映射到第一网络节点的物理显示空间中的本地客户端屏幕空间的逻辑。第一网络节点还可以提供用户界面,该用户界面显示其他网络节点的会话中的参与者客户端列表,并且用于接收指示来自该列表的所选其他参与者客户端的输入。第一网络节点可以接收包含在所选择的其他参与者客户端处使用的参与者客户端视口的工作空间中位置的消息。使用参与者客户端视口的位置,第一网络节点可以将本地客户端视口的位置更新到所选择的其他参与者客户端处使用的参与者客户端视口的所标识的位置,并且在屏幕空间上渲染在更新的客户端视口内具有位置的图形目标。这在协作会话中实现了客户端的可选行为,而不可以称为“跟随”。

描述了一种在协作系统中使用的节点,其包括具有物理显示空间的显示器、用户输入设备、处理器和通信端口,该处理器配置有用来实现跟随模式的逻辑。该逻辑可以配置成:

建立与一个或多个其他网络节点的通信;

存储协作数据,该协作数据标识在虚拟工作空间中具有位置的图形目标,该协作数据包括所标识的图形目标在虚拟工作空间中的位置;

计算在虚拟工作空间中具有位置和尺寸的本地客户端视口到在物理显示空间中具有尺寸的本地客户端屏幕空间的映射,并且根据该映射,将在本地客户端视口中具有位置的图形目标渲染到本地客户端屏幕空间;以及

确定本地客户端视口的虚拟工作空间中的位置和尺寸,用于确定的逻辑包括:

(i)本地控制(诸如用于平移和缩放的触摸屏和鼠标手势)下的第一模式,其响应于在第一网络节点的用户输入而改变本地客户端视口;以及

(ii)第二模式,或者跟随模式,其监测来自一个或多个网络节点中的第二网络节点的、包含远程客户端视口的虚拟工作空间中的位置和位置改变的消息,并且使用消息中包含的位置和位置改变来改变本地客户端视口。

网络节点中的本地客户端屏幕空间具有长宽比,以及包括由网络节点的显示器和显示驱动确定的像素数量的分辨率。分辨率可以是静态的,从某种意义上来说,在跟随模式中,分辨率在本地客户端视口改变期间是不变的。包含位置和位置改变的消息包括具有远程客户端视口的长宽比的尺寸规格。改变本地客户端视口的逻辑可以根据本地客户端屏幕空间的长宽比和远程客户端视口的长宽比之间的差,来限定本地客户端视口的尺寸。以这种方式,可以使用本地客户端视口,在本地客户端屏幕空间上复现使用远程客户端视口在远程客户端屏幕空间上渲染的图形对象,而无需裁剪。

此外,本地客户端屏幕空间具有可以是静态的屏幕空间分辨率,该屏幕空间分辨率包括多个像素,并且本地客户端视口的尺寸限定了包括虚拟工作空间中的多个虚拟像素的可变分辨率。计算映射的逻辑基于静态屏幕空间分辨率和可变分辨率之间的差,确定缩放因子。

描述了一种在协作系统中使用的节点,其包括具有物理显示空间的显示器、用户输入设备、处理器和通信端口,该处理器配置有实现动态位置标记创建、移动、搜索和选择的逻辑。在特定网络处,该逻辑可以配置成:建立与一个或多个其他网络节点的通信;

存储协作数据,该协作数据标识在虚拟工作空间中具有位置的图形目标的,该协作数据包括所标识的图形目标在虚拟工作空间中的位置;

计算在虚拟工作空间中具有位置和尺寸的本地客户端视口到在物理显示空间中具有尺寸的本地客户端屏幕空间的映射,并且根据映射,将在本地客户端视口中具有位置的图形目标渲染到本地客户端屏幕空间;

提供用户界面,该用户界面显示工作空间中的位置标记列表,并且用于接收指示来自该列表的所选位置标记的输入,位置标记在工作空间中具有标记的位置;

确定本地客户端视口在虚拟工作空间中的位置和尺寸,包括将本地客户端视口的位置更新到所选位置标记的标记位置;以及

在屏幕空间上,渲染在本地客户端视口内具有位置的图形目标。

确定本地客户端视口的位置和尺寸的逻辑,包括响应于在第一网络节点指示本地客户端视口的移动或缩放的基于指针或基于触摸的用户输入手势,来改变本地客户端视口的逻辑。

显示位置标记列表的用户界面还显示用于工作空间的默认位置的可选条目,并且包括在选择可选条目时,将本地客户端视口的位置更新到默认位置的逻辑。

逻辑可以配置成使得响应于所选位置标记的选择,改变本地客户端视口位置,而不改变其在虚拟工作空间中的尺寸。

显示位置标记列表的用户界面包括基于本文所描述的实施例中的查询位置标记标签的搜索功能。

事件日志中事件记录中可用的动作包括创建、移动和删除位置标记。

网络节点可以包括向其他网络节点发送消息的逻辑,该消息标识包括创建或移动位置标记的事件,并且该逻辑响应于从第二网络节点接收到消息,来更新位置标记列表。

在所描述的实现方式中,第一网络节点可以接受来自用户输入设备的、创建与修改本地客户端视口相关的事件的输入数据,并且创建限定本地客户端视口在工作空间内的位置的客户端视口数据对象。第一网络节点可以将客户端视口数据对象发送到参与会话的一个或多个其他网络节点,以支持跟随选项。

还描述了一种系统,其包括第一网络节点,该第一网络节点提供在会话中显示在工作空间中的位置标记列表的用户界面,其中位置标记在工作空间中具有标记的位置。用户界面可以接收指示来自列表的所选位置标记的输入。响应于对所选位置标记的选择,系统可以将本地客户端视口的位置更新到标记的位置,并且在屏幕空间上渲染在更新的本地客户端视口内具有位置的图形目标。

在另一个实现方式中,系统可以包括空间事件映射系统,其包括数据处理器和存储空间事件映射的存储器,该空间事件映射将定位虚拟工作空间中的事件,并且提供通信资源以用于协作显示。

此外,描述了在协作会话中用于客户端实现本文所描述的逻辑功能的、本文所述的在协作会话中操作客户端节点的方法,以及存储计算机程序的非瞬时计算机可读介质。

提供上述发明内容是为了提供对本文所描述的协作系统的某些方面的基本理解。该发明内容并非旨在标识所公开的技术的关键或必要要素,或者描绘所公开的技术的范围。

附图说明

所包括的附图是用于说明的目的,并且用于提供本公开的一个或多个实现方式的结构和过程操作的示例。在不背离本公开的精神和范围的情况下,这些附图不会以任何方式限制本领域技术人员可以做出的形式和细节的任何改变。结合以下附图考虑时,通过参照详细的说明书和权利要求,可以得到对主题的更完整的理解,其中相同的附图标记指代附图中相似的元素。将相对于所公开的技术的具体实施例,对所公开的技术进行描述,并且附图未按比例绘制,其中:

图1a、图1b和图1c(统称为图1)图示了在虚拟工作空间内协作的网络节点系统的一个实现方式。

图2图示了在无约束虚拟工作空间的不同区域中具有视口的两个网络节点的一个实现方式。

图3图示了如何在不影响其他网络节点的视口的情况下改变一个网络节点的视口。

图4a、图4b和图4c(统称为图4)图示了第一网络节点“跟随”第二网络节点。

图5是图示了第一网络节点跟随第二网络节点的一个实现方式的流程图。

图6图示了在第一客户端侧网络节点、服务器侧网络节点和第二客户端侧网络节点间用于第一客户端侧网络节点跟随第二客户端侧网络节点的消息映射。

图7a、图7b和图7c(统称为图7)图示了位置标记的示例。

图8a和图8b(统称为图8)图示了从菜单中选择位置标记。

图9a、图9b和图9c(统称为图9)图示了将位置标记添加到虚拟工作空间的示例。

图10是图示了从菜单中选择位置标记的流程图。

图11图示了用于在网络节点间的位置标记的通信的消息映射。

图12图示了数字显示协作环境的示例方面。

图13图示了数字显示协作环境的附加示例方面。

图14a、图14b、图14c、图14d、图14e和图14f(统称为图14)描绘了可以是由协作服务器1305处的数据库维护的工作空间数据的一部分的数据结构。

图15是可以用来在分布式协作系统中实现客户端侧功能或者服务器侧功能的计算机系统或网络节点的简化框图。

具体实施方式

提供以下描述,以使本领域技术人员能够实现和使用所公开的技术,并且以下描述是在特定应用和要求的上下文中被提供的。对于本领域技术人员而言,对所公开的实施例的各种修改将是显而易见的,并且在不脱离所公开的技术的精神和范围的情况下,本文所限定的一般原理可以应用于其他实施例和应用。因此,所公开的技术不限于所示的实施例,而是所公开的技术是与本文所公开的原理和特征相符合的最广范围一致。

“无限工作空间”问题包括需要跟踪人员和设备如何随时间与工作空间交互。在一个实现方式中,这可以通过允许第一系统跟随第二系统的动作来解决。在另一个实现方式中,第一系统可以使用位置标记保存位置,并且使得位置标记可用于第二系统。为了解决这个核心问题,已经创建了“空间事件映射”,其包括使用多个空间事件映射和多个协作组,来支持协作的系统架构。空间事件映射包含限定工作空间中的对象和事件所需的信息。空间事件映射包括指定了在虚拟协作空间中具有位置的事件的数据结构。事件、空间中的事件映射、以及多个用户(包括多个并发用户)对空间的访问支持来自全球用户的协作。

空间:为了支持给定协作会话的无限量空间信息,提供了一种组织被称作工作空间的虚拟空间的方式,例如其特征可以在于由在一个或两个维度具有基本上无限延伸的二维笛卡尔平面,以这种方式使得可以将新内容(该内容可以在空间中被布置和重新布置)添加到空间中,用户可以从空间的一部分导航到另一部分,并且用户可以在需要时很容易在空间找到所需的东西。

事件:与工作空间的交互被作为事件处理。人员(经由有形的用户界面设备),以及系统可以和工作空间交互。事件具有可以限定或者指向要在物理显示器上显示的目标图形对象的数据、作为创建、修改、工作空间内的移动和删除目标图形对象的动作以及与其相关联的元数据。元数据可以包括信息,诸如发起者、日期、时间、工作空间中的位置、事件类型、安全信息和其他元数据。

在工作空间中跟踪事件使得系统不仅能够将工作空间中的空间事件以其当前状态呈现,而且可以在多个显示器上与多个用户共享该空间事件,以便共享可能关于内容的相关外部信息,并且了解空间数据如何随时间演变。此外,在限定无约束工作空间的同时,在所需数据量方面空间事件映射可以具有合理尺寸。

系统中可以有几种不同种类的事件。事件可以被分类为持续事件,也称为历史事件,该事件被永久存储或者被存储系统在其有效寿命期间维护工作空间所需的时间长度。事件可以被分类为短暂事件,其仅在短时间内有用或者有意义,并且在参与会话的其他客户端间现场共享。持续事件可以包括存储在撤消/重放事件流中的历史事件,该事件流可以与会话的空间事件映射相同或者可以从来自会话的空间事件映射中导出。短暂事件可以包括未存储在系统的撤消/重放事件流中的事件。协作系统可以使用一个或多个空间事件映射,跟踪系统中工作空间上的持续事件和短暂事件两者的一些实施例中的工作空间中的时间和位置。

映射:工作空间中的事件映射,可以包括与在工作空间中具有位置的图形对象有关的离散空间事件的总和。工作空间的映射中的事件可以“被映射”到具有特定大小的的可显示区域的物理显示器或屏幕其在本文被称为屏幕空间。客户端可以在工作空间中指定在工作空间中具有位置和尺寸的视口,然后将视口区域中的事件映射到屏幕空间以用于显示。

多用户访问:一个关键特征是在某一工作空间同时工作的所有用户或多个用户,应该能够以近实时的方式看到其他用户的互动。空间事件映射允许具有在不同物理位置的显示的用户在其相应的视口内为任何给定的工作空间中的所有用户来体验近实时事件,包括持续事件和短暂事件两者。本文所描述的协作系统架构使得能够操作许多工作空间和许多用户组。

小部件:小部件是用户可以与工作空间进行交互或查看工作空间的部件,例如,注解、图像、时钟,网络浏览器、视频播放器、位置标记等。窗口是一个小部件,其是一个具有两个斜对角的矩形区域。大多数小部件也是窗口。

在协作环境中,有利的是查看在环境中的其他人在做什么。所公开的技术允许第一网络节点跟随在第二网络节点上发生的事件,而不会显著增加网络利用率。这可以通过交换携带可以包括json数据结构等的简单文本事件记录的消息来实现,而不是在网络节点间发送图像。第一网络节点接收对来自虚拟工作空间内的所有其他参与网络节点的事件的描述,并且将其中的至少一些存储在本地日志中。第一网络节点还创建自己的事件,并且将其中的至少一些存储在本地日志中。第一网络节点具有到虚拟工作空间的视口,该视口可以包括由事件限定的任意数量的图形目标。第一网络节点可以在其视口内,渲染由具有坐标的事件记录所描述的对象,而忽略描述与其视口外的图形对象有关的事件的事件记录。

在一个示例中,第一网络节点的操作者可能对在事件发生时以及在第二网络节点的视口在工作空间中移动时,观看在第二网络节点的视口内发生的事件感兴趣。第一网络节点可以从描述第二网络节点的视口的本地日志以及第二网络节点的视口内图形目标,提取事件信息,并且在本地屏幕空间上渲染这些图形目标。在另一个示例中,第一网络节点的操作者可能希望访问工作空间内由第二网络节点保存为位置标记的地点。第一网络节点可以从描述工作空间的本地日志中提取事件信息,以便标识由第二网络节点保存的位置标记,然后将其视口移动到位置标记的位置。

图1a-1c图示了环境,其描述了具有图形目标、视口和屏幕空间的虚拟工作空间。图1a图示了具有物理显示空间103的第一网络节点101,其包括被分配用于协作会话中的屏幕空间105。如图所示,屏幕空间105可以与在第一网络节点的物理显示空间103共同延伸,或者可以由物理显示空间中的分配的部分(如窗口)组成。物理显示空间具有以像素数为单位的分辨率和由本地网络节点设置的独立于工作空间的长宽比。工作空间中的分辨率基于所使用的坐标系,并且可以包括可以标识虚拟工作空间中的位置的基本上无限数目的虚拟点。在一个示例中,屏幕空间105包括物理显示空间103的整个可显示区域,并且具有与物理显示空间103相同的分辨率。在另一个示例中,屏幕空间可以小于物理显示空间。

在所示示例中,网络节点可以包括屏幕空间105上的触摸传感器,该触摸传感器可以作为用户输入设备而执行。网络节点上的协作系统客户端可以访问本地日志文件111,该本地日志文件111可以存储限定了空间事件映射或者表示当前使用的工作空间的内容的其他类型的数据结构的事件记录。在该示例中,在屏幕空间105中显示一组图形目标191以及位置标记195。

图1b图示了在工作空间中具有位置和尺寸的虚拟工作空间165、第一视口175和第二视口177。多个图形目标191和第一位置标记195的类型的图形目标,具有在第一视口175内的位置。图形目标193具有在第二视口177内的位置。第二位置标记197在第一视口175和第二视口177的边界外的虚拟工作空间165内具有位置。

图1c图示了具有物理显示空间153和屏幕空间155的第二网络节点151。在所图示的示例中,网络节点可以包括可以作为用户输入设备而执行的触摸传感器。该节点可以访问本地日志文件161,该本地日志文件161可以存储限定了空间事件映射或者表示虚拟工作空间(诸如当前在第一网络节点使用的相同工作空间)内容的其他类型的数据结构的事件记录。在该示例中,第二网络节点的视口是视口177,并且映射到屏幕空间155。作为映射的结果,在屏幕空间155中显示一组图形目标193。

网络节点可以生成事件,以记录虚拟工作空间内的图形目标创建,该图形目标诸如文本框、位置标记、网页或视口。事件可以包括虚拟工作空间内的图形目标的位置、事件的时间以及图形目标的目标标识符。然后网络节点可以将该事件传递到工作空间中参与的其他网络节点。每个参与的网络节点可以将事件存储在其本地日志111、161中。在该示例中,对于在虚拟工作空间165内创建或修改或移动图形目标191、193、位置标记195、197和视口175、177的每个事件,都在本地日志111、161中存在事件。事件的图形目标可以由具有渲染图形目标的逻辑的处理器,在屏幕空间105、155上渲染。

该处理器包括逻辑,该逻辑将在视口中具有位置的图形目标渲染到屏幕空间,并且使用作为本地屏幕空间分辨率和本地客户端视口的尺寸的函数的缩放级别,来仅仅渲染位于视口边界内的那些图形目标或图形目标的部分。

屏幕空间可以具有固定长宽比和固定分辨率(以每行像素数和每屏幕行数为单位)。长宽比和分辨率可以用来计算视口到屏幕空间的映射。例如,工作空间中的起始视口可以包括1000点×1000行的阵列。屏幕空间可以具有1000×1000的相同分辨率。然而,如果用户执行缩小操作,屏幕空间分辨率保持不变,但工作空间分辨率增加到例如2000点×2000行。在这种情况下,缩放较大视口中的事件的图形目标,以根据缩放因子来适配在屏幕空间中较小数量的像素内。同样,如果用户执行放大操作,屏幕空间分辨率保持不变,但工作空间分辨率降低到例如500点×500行。在这种情况下,较小视口中的事件的图形目标被缩放,以适配在屏幕空间中较大数量的像素内。可以通过工作空间中的位置、客户端屏幕空间的长宽比以及缩放级别或视口分辨率与屏幕空间分辨率的比例,来指定视口。

这允许诸如移动设备、计算机和显示墙之类的各种设备,以共同的缩放级别以及与相应屏幕空间匹配的长宽比显示相应的视口。所公开的技术允许客户端独立指定视口,以使得两个视口可以重叠。在一个示例中,第一用户修改视口,使得其包括已经包括在第二用户的视口中的区域。在该示例中,视口彼此独立,而且可以修改一个视口,而不会影响另一个视口。在另一个示例中,第一用户“跟随”第二用户,由此第一用户的视口由第二用户的视口规格而确定。在这种情况下,如果屏幕空间具有相同的长宽比和分辨率,则第一用户的屏幕空间显示相同的图形目标,并且可能类似第二用户的屏幕空间的副本。在长宽比和/或分辨率不匹配的情况下,以下节点然后可以基于本地客户端屏幕空间的长宽比和分辨率,将远程客户端视口的尺寸转换为本地客户端视口。

图2、3和4图示了第一网络节点跟随在第二网络节点使用的视口的过程。

图2图示了在虚拟工作空间的不同区域中具有视口的两个网络节点的一个实现方式。图2图示了包括第一视口230和第二视口220的虚拟工作空间210。示出了在第一视口230中具有位置的一组图形目标235,以及在第二视口220内具有位置的一组图形目标225和特定图形目标215。图2还示意性图示了第一网络节点处的第一屏幕空间250和第二网络节点处的第二屏幕空间275。在该图示中,将包含一组图形目标235的第一视口230映射到第一屏幕空间250,并且在其上渲染一组图形目标235。第二屏幕空间275具有在其上渲染的第二视口220中的图形目标(225和215)。每个视口包含一组不同的图形目标。在另一个示例中,部分或全部图形目标可以存在于视口之外。

图3图示了如何在不影响其他网络节点的视口的情况下,改变一个网络节点的视口。图3图示了第二网络节点改变在视口320的工作空间中的尺寸,而不影响第一网络节点的视口330。在该示例中,图3基于图2。图3图示了包括第一视口330和第二视口320的虚拟工作空间310。第一视口330包围一组图形目标335。第二视口包围一组图形目标325。图形目标315存在于虚拟工作空间310内,虚拟工作空间310在第一视口330或第二视口320包围的区域之外。图3还图示了第一屏幕空间350和第二屏幕空间375。第一屏幕空间350具有包含在其上渲染的一组图形目标335的第一视口330。第二屏幕空间375具有包含在其上渲染的一组图形目标325的第二视口320。虚拟工作空间310内的图形目标315存在于视口330、320中的任何一个之外,并且不渲染于第一屏幕空间350或第二屏幕空间375上。

图2和图3之间的区别在于,图3中的视口320已被改变,以便为排除图形目标315。通过使用例如各种输入设备和手势(包括例如鼠标上的变焦轮,或者在键盘上按下的组合键)来改变视口的缩放级别,可以改变视口。也可以通过触摸屏或者鼠标手势(包括使用鼠标或其他指针“捕获”屏幕空间上的位置,然后移动鼠标)来改变视口。

显示器是由像素阵列组成的设备。诸如显示墙1202之类的复杂显示器包括矩形阵列中的多个显示器,并且在由控制器管理的x和y坐标中具有连续像素。在一个实现方式中,显示器可以具有多个窗口,每个窗口包括单独的屏幕空间。

例如,工作空间可以以抽象单元,在坐标x0=-10000、y0=4500和1=5200、y1=-1400之间布置一组对象。如果客户端想要查看该组对象,那么将使用这些坐标限定视口,然后在其屏幕空间内渲染该视口,将工作空间的抽象单元映射到可显示像素的物理单元。如果客户端想要查看更多的工作空间,他们可以缩小,以使得将视口的更多分布的x0、y0、x1、y1坐标映射到屏幕空间中的可用空间。如果他们想要查看工作空间的一个较小的区域,他们可以放大到所需的任何x0'、y0'、x1'、y1'坐标,而且这些坐标被映射到客户端的屏幕空间。在将视口渲染到屏幕空间时,可以通过标准图形缩放技术,来实现视口内容的缩放。

对视口的改变被表征为一个事件,在本示例中该事件导致创建“vc”(视口改变)记录,存储在本地日志中,并传递到协作工作空间中的其他参与者客户端。用于类似下述api的“vc”记录的示例,如下所示:

//server<-->client

[sender-id,"vc",viewport-rect]

viewport-rect:[x1,y1,x2,y2]形式的阵列表示被用作发送客户端上的视口的工作空间的一部分的角。

参与协作工作空间的其他网络节点可以接收“vc”记录,其中可以将该“vc”记录存储在本地日志中。其他网络节点不会对“vc”记录起作用,除非这些节点调用跟随生成“vc”记录的网络节点的逻辑。

图4a、4b和4c图示了第一网络节点“跟随”在第二网络节点使用的视口。图4a图示了包括第一视口430、第二视口420a和第三视口420b的虚拟工作空间410。图4a还图示了第一屏幕空间450和第二屏幕空间475。第一视口430指定了虚拟工作空间410中包围一组图形目标435的区域。第一视口430未被映射到屏幕空间450和475上,并且例如对应于另一个本地客户端视口。第二视口420a指定了包围一组图形目标425并且由操作屏幕空间450的本地客户端映射到屏幕空间450的虚拟工作空间410中区域。第三视口420b指定了虚拟工作空间410中的区域,该区域在跟随第一屏幕空间450的视口的操作中由操作屏幕空间475的本地客户端映射到屏幕空间475。图形目标415存在于由第一视口430或第二视口420a包围的区域之外的虚拟工作空间410内,并且在该示例为42b。

第一屏幕空间450具有第一长宽比,并且显示在第二视口420a(一组图形目标425)内具有位置的对象。第二视口具有匹配的长宽比。工作空间中虚拟空间中的视口的尺寸,可以是与屏幕空间450中的像素尺寸不同的长宽比的倍数。长宽比的倍数确立了第一屏幕空间450中的缩放级别,并且该倍数可以由本地客户端视口改变。

第二屏幕空间475具有第二长宽比,并且使用具有与第二屏幕空间相同的长宽比的视口420b,并且包含第一视口420a。第三视口420b具有尺寸,该尺寸是使用来自操作第一屏幕空间的客户端的视口改变消息和第二屏幕空间475的参数而确定的。在该示例中,其具有与第一视口420a相同的缩放级别和相同的中心点,并且因此显示具有在第二视口420(一组图形目标425)内的位置的对象,并且具有与第二屏幕空间匹配的长宽比。虚拟工作空间410内的图形目标415a存在于420a之外,但与视口420b重叠。因此,图形目标415a不在第一屏幕空间450上被渲染,而是部分被渲染于第二屏幕空间475上。图形目标415b在视口420a、420b和430之外;因此不会出现在屏幕空间450或屏幕空间475中。

图4b图示了在选择用于跟随操作的第一网络节点之前的第二网络节点,并且其中已经为其本地屏幕空间475指定了视口430(在该示例中,屏幕空间475是显示器上的窗口,而不是整个显示器)。第一视口430内的一组图形目标435在第一屏幕空间450上被渲染。

图4c图示了在第二网络节点处选择要跟随的第二网络节点的逻辑的效果。这可以由为第一屏幕空间450确定在第一节点处使用的视口规格并且生成用于第二节点的视口规格的逻辑来完成。计算可以为视口420b生成本地客户端视口规格,视口420b具有与视口420a相同的缩放级别和中心点,并且如上所解释的,在具有与第二屏幕空间475匹配的长宽比的同时,还在工作空间包围相同区域。这可以通过将本地屏幕空间475的长宽比(高度/宽度)与要跟随的视口420a的长宽比进行比较的逻辑,来实现。如果长宽比为1或更小,则高度等于或大于宽度。在这种情况下,在工作空间中指定本地客户端视口420b,以使视口420a在工作空间中的高度被跟随,并且使工作空间中的宽度由本地屏幕空间475的长宽比确定。如果长宽比大于1,则高度小于宽度。在这种情况下,本地客户端视口420b被指定为使视口420a在工作空间中的宽度被跟随,并且使工作空间中的高度由屏幕空间475的长宽比确定。以这种方式,即使长宽比不匹配,所有视口420a也将落在视口420b的范围内。

在该实现方式中,参与的网络节点执行图形用户界面,该图形用户界面包括诸如在该示例中标记为“用户”的菜单选项卡482之类的对象。菜单选项卡可以位于或靠近屏幕空间475。(在该图示中,为了讨论长宽比匹配的目的,屏幕空间475是显示器上的小窗口。在其他系统中,屏幕空间可以包括显示器上可显示区域的不同部分,这包括所有可显示区域)。对菜单选项卡的选择导致出现用户菜单,其中用户菜单列出参与协作工作空间的客户端(优选的,所有客户端)的身份。在该示例中,协作工作空间中的参与者是第一节点484和第二节点486。第一节点484是与屏幕空间450相关联的用户名。第二节点486是与图4a的屏幕空间475相关联的用户名。

客户端可以包括逻辑,该逻辑在从用户菜单列表中选择项目时,使得要使用模板生成“bf”(开始跟随)类型的“ve”(易失性事件)。以下所描述的api,如下所示:

//server<-->client

[client-id,"ve",target-id,event-type,event-properties]

·client-id(string):发起端客户端的id

·target-id(string):与该事件相关的目标窗口的id

·event-type(string):易失性事件类型

·properties(object):描述事件的相关键/值的json对象

可以在该模板中使用的、涉及跟随模式的易失性事件类型可以包括:

·bf:开始跟随:用户a开始跟随用户b。用于通知用户a,用户b正在跟随。

·ef:结束跟随:用户b不再跟随用户a。用于通知用户a,用户b不再跟随。

第一节点484通过clint-id标识,并且与第一屏幕空间450相关联,而第二节点486由target-id标识,并且与图4a的第二屏幕空间475相关联。

在该实现方式中,具有屏幕空间475的第二节点486选择跟随具有屏幕空间450的第一节点484。第二节点484的网络节点可以创建并传送“bf”类型的“ve”记录,以通知协作会话其开始跟随第一节点484。第二节点486可以通读其本地日志,从第一节点484查找最新的视口改变“vc”记录。来自“vc”记录的第一节点486视口420a的规格,被用来产生用于第二节点484的视口420b的规格。然后,第二节点484可以使用本地视口420b,来查找要在屏幕空间475上渲染的本地视口420b内的图形目标425(参见图4a)。

只要第二节点486跟随第一节点484,第一节点484在视口420a中的任何改变(诸如位置或缩放级别)都在会话中被共享,并且用来更新第二节点486的本地视口420b。

图5是图示了逻辑的一个实现方式的流程图,该逻辑在第一网络节点处执行,以产生跟随第二网络节点控制下的视口的本地视口。所公开的技术允许多个主体用户在工作空间内,跟随单个目标客户端侧网络节点的活动。

图5是用于解释由客户端侧网络节点执行的用户输入的过程的简化流程图。简化流程图中所示的顺序是为了说明的目的而提供,并且可以修改为适合特定的实现方式。例如许多步骤可以并行执行。在该实现方式中,工作空间中的所有用户都将收到在该工作空间内发生的所有历史事件和短暂事件。工作空间在本质上可以是无限的,而客户端的视口在工作空间中具有特定的位置和尺寸。多个客户端可以在工作空间内与重叠的视口协作。客户端可以接收和记录与具有在其视口之外的坐标的对象相关的事件。

在该示例中,第一网络节点建立与参与协作工作空间的一个或多个其他网络节点510的通信。这可以包括登录到服务器处的会话,以及通过服务器与其他网络节点或其他通信路径的通信。

对于初始化,第一网络节点接收协作数据,诸如以工作空间内发生的历史事件的日志的形式的空间事件映射,或者标识图形对象在工作空间中的位置的其他数据结构。例如作为历史事件的日志的一部分或者以其他方式,第一网络节点还接收参与会话的网络节点列表。第一网络节点可以存储标识图形目标的协作数据,图形目标在虚拟工作空间中具有在工作空间会话中使用的位置,协作数据包括相应图形目标520在虚拟工作空间中的位置。作为该初始化的一部分,第一网络节点可以实例化初始“vc”(视口改变)记录,并将该记录传递到工作空间中的其他参与者客户端。可以从来自上一个会话的日志中检索初始“vc”记录。初始“vc”记录也可以是工作空间内的默认“vc”记录,或者可以通过某种其他方法(诸如逻辑)来实例化,以标识工作空间中最常用的区域。第一网络节点将在虚拟工作空间内具有位置和尺寸的本地客户端视口映射到本地客户端屏幕空间530。为了设置“跟随”标志,为与第一网络节点相关联的第一主体用户,提供在其他网络节点540处显示会话中的参与者列表的用户界面。然后,第一主体用户可以从标识的用户列表中选择目标用户。第一网络节点创建“ve:bf”记录,并将该记录传递到工作空间的参与网络节点,该参与网络节点可以包括所选用户的网络节点。第一主体网络节点现在“跟随”所选的网络节点。

第一网络节点继续从会话中的其他参与者接收消息,该消息包括包含在所选择的其他参与者客户端处所使用的参与者客户端视口550在工作空间中的位置的消息。第一网络节点仅渲染在所选用户的视口坐标内出现的那些图形目标。当所选择的其他参与者客户端改变所选网络节点的视口时,第一网络节点可以将本地客户端视口的位置更新到在所选择的其他参与者客户端560处使用的参与者客户端视口的所标识的位置。

然后,第一网络节点可以在屏幕空间上渲染在更新的本地客户端视口570内具有位置的图形目标。

所公开的技术可以将视口的内容渲染于本地屏幕空间上,以便说明诸如本地屏幕空间的长宽比、高度和宽度之类的属性的可能差异。对虚拟工作空间的改变(诸如添加、删除或修改与所选用户的视口相交的图形目标),也被渲染于第一网络节点的屏幕空间上。

第三用户还可以在其网络节点内设置跟随标志,以便跟随第一网络节点、所选用户的网络节点或某个其他网络节点。在任何时候,第一用户可以取消对跟随标志的设置并返回到其原始视口。

在该示例中,工作空间内的多个客户端可以是用于“跟随方法”的主体网络节点或者目标网络节点。在一个实现方式中,网络节点可以跟随多个目标,并且可以同时跟随一个视口中的目标并在第二视口内进行协作。

图6图示了在第一客户端侧网络节点、服务器侧网络节点和第二客户端侧网络节点之间用于第一客户端侧网络节点跟随第二客户端侧网络节点的消息映射。

最初,在该实现方式中,第二客户端侧网络节点619正在参与协作工作空间。第二客户端侧网络节点619可以通过服务器侧网络节点615上的空间事件映射,来创建与其他网络节点共享的事件。第二客户端侧网络节点619还可以通过服务器侧网络节点615,从其他客户端侧网络节点接收事件。通过一个或多个客户端侧网络节点与服务器侧网络节点之间的事件620的通信来传送事件。在该示例中,服务器侧节点将事件分发至其他参与网络节点。

在该示例中,第一客户端侧网络节点611通过建立与服务器侧网络节点630的通信,来加入协作工作空间。服务器侧网络节点向第一客户端侧网络节点640,发送包括用户列表、网络节点的视口改变记录、空间事件映射和位置标记的协作数据。然后,第一客户端侧网络节点将协作数据存储到本地日志中。如图5所述,第一客户端侧网络节点611设置初始视口,然后发现在本地日志内与其视口相交的图形目标的事件记录。然后将与视口相交的图形目标渲染在屏幕空间上。

第一客户端侧网络节点611和第二客户端侧网络节点619都可以在工作空间内创建、传送和接收事件,并且可以查看在其视口内发生的事件。可以通过服务器侧网络节点650,将事件传递到所有参与的网络节点。所公开的技术允许第一用户跟随第二用户。在该示例中,第一客户端侧网络节点611可以从其本地日志中的用户列表中,选择正在第二客户端侧网络节点619上工作的目标用户的身份。该选择使得第一客户端侧网络节点创建开始跟随的“ve:bf”记录,该记录可以通过服务器侧网络节点660传递至第二客户端网络节点。仍然将事件传递至所有参与的网络节点。然而,第一客户端侧网络节点产生包含在第二客户端侧网络节点指定的视口的本地客户端视口,并且仅显示与更新的本地客户端视口相交的那些事件,并且实际上跟随第二客户端侧网络节点的视口。事件可以由第二客户端侧网络节点619或者由图6中未图示的第三客户端侧网络节点而生成。然而,在该示例中,第一客户端侧网络节点611不会在“跟随我”模式时,生成改变工作空间的可显示内容的事件,而是继续接收由其他网络节点670创建的事件。

在该示例中,第二客户端侧网络节点619可以改变其视口。视口的改变使得第二客户端侧网络节点生成新的视口改变“vc”记录,并将该记录传送至工作空间680中的其他参与者。在跟随第二客户端侧网络节点的同时,第一客户端侧网络节点改变其本地客户端视口以进行匹配,然后渲染来自其日志的、与新的本地客户端视口相交的图形目标。

在另一个视口查找技术中,设置具有在工作空间中位置的位置标记的事件,可以被共享在空间事件映射或其他类型的协作数据结构中。第一网络节点的第一用户可以随时选择由任何参与者设置的位置标记。位置标记可以用作第二用户所在的记录,而不是其现在所在的记录。

图7a、7b和7c图示了具有位置标记(其位于客户端的当前视口内)的示例的屏幕空间,以及可能与这些示例一起发生的一些事件。图7a图示了屏幕空间中包括第一位置标记721、第二位置标记723、第三位置标记725和图形目标751的多个位置标记。

图7b图示了图7a中的对象。图7b还示出了在用户已经使用鼠标在位置标记上点击一次(这使得出现第三位置标记的名称)之后的第三位置标记725的名称。在该示例中,位置标记725的名称是“位置a”。

图7c显示了通过改变当前视口(具有固定的屏幕空间尺寸)的尺寸而使得工作空间放大,其中在基于指针或基于触摸的用户输入手势之后(诸如,例如双击第二位置标记),第二位置标记723变为屏幕空间的中心坐标(0,0)。双击手势使得本地客户端计算本地视口的新视口规格,其以双击的工作空间中的位置为中心(在该示例中位于位置标记上)并且具有因双击而增加的缩放级别。在该示例中,第三位置标记725的名称已经消失,并且视口尺寸已被改变,以便在工作空间内限定较小的空间,其中视口的中心是双击的位置(即第二位置标记723),而屏幕空间的中心也是双击的位置。第一位置标记721不再位于视口内,并且第三位置标记725的图形目标仅在屏幕空间内部分可见,其中第三位置标记的一部分在视口外。视口不再包含所有图形目标751,而只包含适配在视口内的图形目标部分。

图8a和8b图示了具有用于从菜单中选择位置标记的构造的图形用户界面。图8a图示了包括用于位置a的第一位置标记821、用于位置b的第二位置标记823、用于位置c的第三位置标记825和图形目标851的多个对象。还图示了位置图标803。单击菜单栏中的位置图标803使得位置菜单801出现,位置菜单801可以具有零个或多个条目。在该示例中,位置菜单801具有5个条目:添加位置,将视口改变为预设原点,以及三个位置标记。在菜单中可以有未在屏幕空间中表示的其他位置标记。如图8b所示,在该示例中选择菜单上的条目使得更新用于本地视口的视口规格,这实际上导致在实际上保持选择时的缩放级别同时,将所选择的位置标记移动到屏幕空间的中心坐标(例如,0,0)。除了显示位置标记列表之外,该显示位置标记列表的用户界面还显示用于工作空间的默认位置或者预设原点位置的可选条目(“原点”)的可选条目。客户端包括逻辑,该逻辑实际上在保持选择时的缩放级别同时,还在选择“原点”可选条目时,将本地客户端视口的位置更新到默认位置。

如图8b所示,在位置菜单801内是标记为“位置a”814的可选项目。选择位置a814使得视口使用第一位置标记821作为视口的中心,并且使屏幕空间的内容出现以向上和向右移动。第二位置标记823和图形目标851现在仅在屏幕空间中部分可见,并且第三位置标记825在屏幕空间内不再可见。在该示例中,本地客户端视口在工作空间中移动,而不会改变大小。因此,缩放级别保持不变。

位置标记名称是可搜索的标签,该标签可以反映在虚拟工作空间中具有位置的资料的内容。在具有大量位置标记的工作空间中,用户界面可以包括基于查询位置标记标签的搜索功能。

图9a、9b和9c图示了将位置标记添加到虚拟工作空间的示例。图9a图示了包括第一位置标记921、第二位置标记923、第三位置标记925和图形目标951的多个对象。还图示了位置图标903以及可以具有零个或多个条目的位置菜单901。在该示例中,位置菜单901中的第一条目是“添加位置”911。选择“添加位置”911条目可以调用图9b所示的子菜单项,该子菜单项包括位置标记类型915(其被用来选择要显示的创建位置标记事件的图形目标)、位置标记名称916的字段以及“创建标记”按钮917。创建新的位置标记可以包括选择标记类型915。在该实现方式中,可用的标记类型用颜色编码,以指示不同类别的位置标记。下一步是在位置标记名称916的字段中输入一个值,在该示例中该值是“新的位置标记”。最后一步是选择“创建标记”按钮917。如图9c所示,该选择使得子菜单消失,并且使名为“新位置标记”的新位置标记927出现在屏幕空间的中间。然后创建“he:markercreate”记录并将其分发至其他参与的网络节点:

[client-id,"he",new-widget-id,"markercreate",{

"creationtime":1387565966,

"name":"newlocationmarker",

"y":1828,

"x":-875,

"color":0

}]

在创建新位置标记的网络节点中运行的客户端,包括向其他网络节点发送消息的逻辑,该消息标识包括创建或移动位置标记的事件。此外,响应于接收到携带标记的消息,在网络节点处运行的客户端中的逻辑以及在协作系统中其他网络节点处的逻辑,创建标记或者移动来自另一个(第二)网络节点的事件,以更新列表位置标记。

图10是图示了从菜单中选择位置标记的流程图。图10是用于解释由客户端侧网络节点执行的用户输入的过程的简化流程图。简化流程图中所示的顺序是为了说明的目的而提供,并且可以修改为适合特定的实现方式。许多步骤例如可以并行执行。在该实现方式中,工作空间中的所有用户都将接收在该工作空间内发生的所有历史事件和短暂事件。工作空间基本上可以是无限的,而用于客户端的视口可以包括与客户端的视口相交的工作空间的一部分的内容。多个客户端可以在工作空间内,与重叠的视口协作。客户端可以接收和记录由事件记录限定的、具有在其视口之外的坐标的对象。

在该示例中,第一网络节点建立与作为协作工作空间会话1010中的参与者客户端的一个或多个其他网络节点的通信。第一网络节点存储与图形目标相关的事件日志的至少部分,这包括创建或移动位置标记。事件的目标具有在工作空间会话中使用的位于虚拟工作空间中的位置,日志中的条目包括事件的图形目标在虚拟工作空间中的位置、与图形目标相关的动作、事件的时间以及图形目标1020的目标标识符。第一网络节点将本地客户端视口映射到第一网络节点1030处的物理显示空间中的本地客户端屏幕空间。网络节点提供用户界面,该用户界面显示会话中的工作空间中的位置标记列表,并且用于接收指示来自该列表1040的所选位置标记的输入,位置标记在工作空间中具有标记的位置。

响应于对所选位置标记的选择,本地网络节点将本地客户端视口的位置更新到标记的位置1050,并且在屏幕空间上渲染具有位于更新的本地客户端视口1050内的位置的图形目标。

图11图示了用于网络节点之间的位置标记的通信的消息映射。图11图示了第一客户端侧网络节点、服务器侧网络节点和第二客户端侧网络节点之间、用于第一客户端侧网络节点跟随第二客户端侧网络节点的消息映射。

最初,在该实现方式中,第二客户端侧网络节点1119正在参与协作工作空间。第二客户端侧网络节点1119可以通过服务器侧网络节点1115上的空间事件映射,来创建与其他网络节点共享的事件。第二客户端侧网络节点1119还可以通过服务器侧网络节点1115,从其他客户端侧网络节点接收事件。通过一个或多个客户端侧网络节点与服务器侧网络节点间的事件1120的通信,发生事件的传送。

在该示例中,第一客户端侧网络节点1111通过建立与服务器侧网络节点1130的通信,来加入协作工作空间。服务器侧网络节点将包括诸如位置标记之类的图形目标的协作数据,发送到第一客户端侧网络节点1140。然后,第一客户端侧网络节点将协作数据存储到本地日志中。如图5所描述的,第一客户端侧网络节点1111设置初始视口,然后发现在本地日志内与其视口相交的图形目标的事件记录。然后在屏幕空间上渲染与视口相交的事件的图形目标。

第一客户端侧网络节点1111和第二客户端侧网络节点1119都可以在工作空间内创建、传送和接收事件,并且可以查看在其视口内发生的事件。可以通过服务器侧网络节点1150,将事件传递到所有参与的网络节点。所公开的技术允许第一用户创建与第二用户共享的位置标记。在该示例中,第一客户端测网络节点1111可以添加位置标记,如图9所示。这使得创建“he:markercreate”记录,该记录可以通过服务器侧网络节点1160传递到第二客户端侧网络节点。从那时开始,位置标记被传递到其可以被选择的工作空间1170中的其他参与者。当调用位置标记并且作为结果更新本地视口时,参与者节点可以向其他参与者发送视口改变“vc”事件。

图12图示了数字显示协作环境的示例方面。在该示例中,多个用户1201a-h(统称为1201)可能希望在创建复合图像、音乐、视频、文档和/或其他媒体时彼此协作,所有这些都在图12中一般地被指定为1203a-d(统称为1203)。所示示例中的用户使用被配置为电子网络节点的各种设备(例如平板电脑1202a、个人计算机(pc)1202b和多个大格式显示器1202c、1202d、1202e(统称为设备1202)),以便彼此协作。在所图示的示例中,本文有时称为“显示墙”的大格式显示器1202c容纳一个以上用户(例如,用户1201c和1201d,用户1201e和1201f以及用户1201g和1201h)。被称为客户端侧网络节点的用户设备具有显示器,其上分配有用于显示工作空间中的事件的屏幕空间。用于给定用户的屏幕空间可以包括显示器的整个屏幕、屏幕的子集、要在屏幕上显示的窗口等,以使得与几乎无限延伸的工作空间相比,每个屏幕都具有有限的面积或延伸。

图13图示了数字显示协作环境的附加示例方面。如图12所示,本文有时被称为“显示墙”的大格式显示器1202c、1202d、1202e由相应的客户端侧通信网络1304控制,通信网络1304又与中央协作服务器1305进行网络通信,该中央协作服务器1305被配置成一个或多个服务器侧物理网络节点,该中央协作服务器1305可访问存储用于多个工作空间的空间事件映射栈的数据库1306。

如本文所使用的,物理网络节点是附接到网络的有源电子设备,并且能够通过通信信道发送、接收或转发信息。可以部署为网络节点的电子设备的示例包括所有种类的计算机、工作站、膝上型计算机、手持计算机和智能电话。如本文所使用的,术语“数据库”不一定意味着任何结构的联合。例如,两个或多个单独的数据库在一起考虑时,仍然构成在本文使用的该术语“数据库”。

在协作服务器1305上运行的应用可以使用诸如apache或nginx之类的网络服务器软件或诸如node.js之类的运行环境而进行托管。可以例如在运行操作系统(诸如linux)的虚拟机上进行托管。在图13中,启发式地将服务器1305示为单个计算机。然而,服务器架构可能涉及许多计算机的系统,每个均运行服务器应用,这对大型云计算服务而言是典型的。服务器架构包括通信模块,该模块可以配置用于各种类型的通信信道,包括协作会话中一个以上用于每个客户端的信道。例如,通过网络上的近实时更新,客户端软件可以使用基于消息的信道(例如基于websocket协议)与服务器通信模块进行通信。对于文件上传以及接收初始大容量工作空间数据,客户端软件可以经由https与服务器通信模块进行通信。服务器可以运行例如以ruby-on-rails服务的javascript编写的前端程序,支持例如基于oauth支持认证/授权,并且支持多个分布式客户端之间的协调。服务器通信模块可以包括基于消息的通信协议栈(诸如websocket应用),其执行记录在工作空间数据中的用户动作的功能,并且将用户动作中继到其他适用的客户端。例如,该系统可以在node.js平台上运行,或者在其他被设计来用于处理高负载套接字应用的服务器技术上运行。

例如,数据库1306存储用于每个会话的空间事件映射的工作空间数据集的数字表示,其中工作空间数据集可以包括或标识可在显示画布上显示的对象有关的事件。工作空间数据集可以以空间事件栈的形式实现,可以被管理以使得至少持续空间事件(称为历史事件)被添加到栈(推送)中,并在撤销操作期间以先进后出的模式从栈(弹出)中被移除。可以存在用于许多不同的工作空间的工作空间数据集。可以在数据库中或作为链接到工作空间的机器可读文档,配置用于给定工作空间的数据集。工作空间可以具有无限或者几乎无限的尺寸。工作空间数据包括标识可以由显示客户端在显示墙上的显示区域中显示的对象的事件数据结构,并且将工作空间中的时间和位置与由事件数据结构标识的对象相关联。每台设备1202仅显示整个工作空间的一部分。显示墙具有用于显示对象的显示区域,显示区域被映射到工作空间中的对应区域,该区域对应于工作空间中以工作空间中的用户位置为中心或者利用工作空间中的用户位置以其他方式定位的视口。显示区域到工作空间中的对应视口的映射,可以由显示客户端用来标识显示区域内要在显示器上渲染的工作空间数据中的对象,并且用来标识将用户触摸输入链接到显示器上显示区域中的位置处的对象。

服务器1305和数据库1306可以构成服务器侧网络节点,其包括存储与在工作空间中具有位置的图形目标相关的事件的日志的存储器,日志中的条目包括事件的图形目标在工作空间中的位置、事件的时间和事件的图形目标的目标标识符。服务器可以包括逻辑,该逻辑建立到多个活动客户端侧网络节点的链接,接收标识与修改和创建在工作空间中具有位置的图形目标有关的事件的消息,响应于该消息而将事件添加到日志中,并且将与从特定客户端侧网络节点接收的消息中标识的事件相关的消息,分发到其他活动客户端侧网络节点。

服务器1305中的逻辑可以包括应用程序界面,其包括指定的一组程序和参数,通过该应用程序界面将携带日志的部分的消息发送到客户端侧网络节点,并且从客户端网络节点接收携带标识与在工作空间中具有位置的图形目标有关的事件的数据的消息。

此外,服务器1305中的逻辑可以包括应用界面,其包括将从一个客户端侧网络节点接收的事件,分发到其他客户端侧网络节点的过程。

符合api的事件可以包括要存储在日志中并且分发至其他客户端侧网络节点的第一类事件(历史事件)以及要分发至其他客户端侧网络节点而不存储在日志中的第二类事件(短暂事件)。

服务器1305可以存储用于多个工作空间的工作空间数据集,并且向参与会话的显示客户端,提供工作空间数据。然后,由计算机系统1310利用包括显示客户端软件的适当软件1312,来使用工作空间数据,以确定要在显示器上显示的图像,并且将用于交互的对象分配至显示器表面上的位置。服务器1305可以存储和维护大量工作空间,以用于不同的协作会话。每个工作空间可以和一组用户相关联,并且配置成只能由该组中的授权用户访问。

在一些替代方案中,服务器1305可以跟踪每台设备1202的“视口”,从而指示在该设备上画布可浏览的部分,并且可以向每台设备1202提供渲染视口所需的数据。

在客户端设备上运行的、负责渲染绘制对象、处理用户输入并且与服务器通信的应用软件,可以基于html5或其他基于标记的过程,并且可以在浏览器环境中运行。这允许轻松支持许多不同的客户端操作系统环境。

存储在数据库1306中的用户界面数据,包括各种类型的对象,包括诸如图像位图、视频对象、多页文档、可缩放矢量图形之类的图形构造。设备1202每个都经由通信网络1304与协作服务器1305通信。通信网络1304可以包括所有形式的网络部件,诸如lan、wan、路由器、交换机、wifi部件、蜂窝部件、有线和光学部件以及因特网。在一种情况下,两个或两个以上用户1201位于相同的房间中,并且其设备1202经由wifi与协作服务器1305进行通信。在另一种情况下,两个或两个以上用户1201彼此分隔数千英里,并且其设备1202经由因特网与协作服务器1305进行通信。显示墙1202c、1202d、1202e可以是多点触摸设备,其不仅显示图像,而且还可以感测利用触控笔或身体的一部分(诸如一根或多根手指)触摸显示表面而提供的用户手势。在一些实施例中,显示墙(例如,1202c)可以区分由一根或多根手指(或者例如,整个手部)的触摸和触控笔的触摸。在一个实施例中,显示墙通过发射红外光并且检测所接收的光来感测触摸;从用户手指反射的光具有显示墙区分环境接收光的特征。触控笔以显示墙可以区别环境光和从用户手指反射的光的方式,发射自己的红外光。例如显示墙1202c可以是垂直和水平平铺multitaction单元(型号:mt553utbl,由芬兰赫尔辛基的multitouch公司制造)而得到的阵列。为了提供各种表现手段,显示墙1202c以维持“状态”的方式进行操作。也就是说,可以(除其他之外)根据输入的顺序,对给定输入做出不同的反应。例如,使用工具栏,用户可以选择多种可用的画笔样式和颜色中的任一种。一旦被选择,显示墙处于以下状态,即,触控笔的后续笔画将使用所选择的画笔样式和颜色画一条线。

在说明性的实施例中,显示阵列可以具有可用作屏幕空间的可显示区域,该屏幕空间共计高度为6英尺并且宽度为30英尺,其宽度足以使多个用户站在显示墙的不同部分并同时操纵它。

图14a-14f描绘了数据结构,该数据结构可以是由协作服务器1305上的数据库维护的工作空间数据的一部分。在图14a中,图示了事件数据结构。事件是与工作空间数据的交互,该交互可能导致工作空间数据的改变。因此,事件可以包括事件标识符、时间戳、会话标识符、事件类型参数、作为client-id的客户端标识符以及工作空间中的位置阵列,该事件可以包括一个或多个用于对应事件。例如,合意的是,时间戳具有毫秒级分辨率或者甚至更精细的分辨率,以便最大限度地减小影响单个对象的竞争事件的竞态条件(racecondition)的可能性。此外,事件数据结构可以包括ui目标,其标识出工作空间数据中客户端显示器上的触摸屏上的笔画被链接到的对象。事件可以包括样式事件,其例如指示笔画的显示参数。事件可以包括文本类型事件,其指示文本对象在工作空间中的输入、修改或移动。事件可以包括卡类型事件,其指示卡类对象在工作空间中的创建、修改或移动。这些事件可以包括标识笔画位置阵列的笔划类型事件,以及用于笔画的显示参数,诸如例如颜色和线宽。事件可以包括开始跟随事件和视口改变事件。事件可以包括标记创建事件。

事件可以分为持续历史事件和短暂事件。处理事件以增加工作空间数据以及用户之间的共享可以取决于事件的分类。该分类在事件类型参数中可以是固有的,或者可以在事件数据结构中,使用附加标志或字段来指示分类。

空间事件映射可以包括具有用于历史事件的条目的事件日志,其中每个条目包括如图14a所示的结构。服务器侧网络节点包括逻辑,该逻辑从客户端侧网络节点接收携带短暂和历史事件的消息,并且将短暂事件发送到其他客户端侧网络节点,而不将其转发到将事件添加为日志中对应条目的服务器中,以及在将历史事件转发到将事件作为对应条目添加到日志的服务器的同时,将历史事件发送到其他客户端侧网络节点。

图14b图示了卡数据结构。卡数据结构可以提供标识用于工作空间数据中的对象的当前状态信息的属性缓存,该属性包括会话标识符、卡类型标识符、阵列标识符、客户端标识符、卡的尺寸、与卡相关联的文件类型以及工作空间内的会话位置。

图14c图示了将多个事件和对象合并成可缓存集合(称为块)的数据结构。数据结构包括会话id、包括在块中的事件的标识符以及创建块的时间戳。

图14d图示了用于链接到参与在所选择的工作空间中的会话的用户的数据结构。该数据结构可以包括访问令牌、用于会话显示客户端的客户端标识符、链接到显示客户端的用户标识符、指示用户上次访问会话的参数、以及到期时间和用于携带各种关于会话的信息的cookie。例如,该信息可以为用户维护工作空间内的当前位置,每当用户登录时,可以使用该位置确定要在登录所关联的显示客户端上显示的工作空间数据。

图14e图示了可以以与大格式显示器相关联而使用的显示器阵列数据结构,该大格式显示器是通过联合显示器而实现,每台显示器均具有显示客户端。这种联合显示器中的显示客户端作为单个显示器进行配合。工作空间数据可以维持通过阵列id标识显示器阵列并且标识每台显示器的会话位置的显示器阵列数据结构。每个会话位置可以包括联合显示器在区域内的x偏移和y偏移、会话标识符和深度。

该系统可以对与客户端侧网络节点的通信进行加密,并且可以对存储了空间事件映射的数据库进行加密。此外,在一些实施例中,空间事件映射的缓存副本在客户端侧网络节点上被加密,以防取得访问客户端侧计算机机会的入侵者,对数据进行未经授权的访问。

图14f图示了用来将活动客户端映射到活动工作空间的全局会话活动表(gsat)。数据结构包括工作空间名称、设备类型、client-id、会话id、行动者类型以及行动者id。

图15是可以用来实现分布式协作系统中的客户端侧功能(例如计算机系统1310)或者服务器侧功能(例如服务器1305)的计算机系统或网络节点的简化框图。计算机系统通常包括经由总线子系统1512与多个外围设备进行通信的处理器子系统1514。这些外围设备可以包括存储子系统1524(其包括存储器子系统1526和文件存储子系统1528)、用户界面输入设备1522、用户界面输出设备1520和通信模块1516内的网络界面子系统。输入设备和输出设备允许用户与计算机系统进行交互。通信模块1516针对到外部网络的界面(包括到通信网络1304的界面)提供物理和通信协议支持,并且经由通信网络1304耦合到其他计算机系统中的对应通信模块。通信网络1304可以包括许多互连的计算机系统和通信链路。这些通信链路可以是有线链路、光链路、无线链路或者用于信息通信的任何其他机构,但是至少在其末端处通常是基于ip的通信网络。在一个实施例中,通信网络1304是因特网,然而在其他实施例中通信网络1304可以是任何合适的计算机网络。

网络界面的物理硬件部件有时被称为网络界面卡(nic),尽管其无需为卡的形式。举例来说,物理硬件部件可以是直接装配到母板的集成电路(ic)和连接器的形式,或者可以是与计算机系统的其他部件一起在单个集成电路芯片上制造的宏单元的形式。

用户界面输入设备1522可以包括键盘,诸如鼠标、轨迹球、触摸板或图形输入板之类的指示设备、扫描仪、并入显示器的触摸屏(包括大格式数字显示器1202c的触敏部分)、诸如语音标识系统之类的音频输入设备、麦克风和其他类型的有形输入设备。通常,使用术语“输入设备”旨在包括将信息输入计算机系统中或通信网络1304上的所有可能类型的设备和方式。

用户界面输出设备1520可以包括显示子系统、打印机、传真机或者非视觉显示器(诸如音频输出设备)。显示子系统可以包括阴极射线管(crt)、诸如液晶显示器(lcd)之类的平板装置、投影装置或者用于产生可视图像的其他机构。在图12的实施例中,其包括大格式数字显示器1202c的显示功能。通常,使用术语“输出设备”旨在包括将信息从计算机系统输出到用户或者另一台机器或计算机系统的所有可能类型的设备和方式。

存储子系统1524存储基本编程和数据构造,其提供所公开的技术的某些实施例的功能。存储子系统1524包括实现空间事件映射协作系统客户端或者空间事件映射协作系统服务器的计算机程序指令,并且可以包括用于诸如“跟随我”和“位置标记”之类的模块的逻辑。

当被用于实现服务器侧网络节点时,存储子系统1524包括包含存储了机器可读数据结构的非瞬时计算机可读介质的产品,该机器可读数据结构包括在工作空间中定位事件的空间事件映射,其中该空间事件映射包括事件日志、具有事件的图形目标在工作空间中的位置和时间的日志条目。此外,存储子系统1524包括包含用于执行本文所描述的与服务器侧网络节点相关联的程序的可执行指令的产品。

当被用于实现服务器侧网络节点时,存储子系统1524包括包含存储了机器可读数据结构的非瞬时计算机可读介质的产品,该机器可读数据结构包括以下解释的在工作空间中定位事件的缓存副本形式的空间事件映射,其中该空间事件映射包括事件日志、具有事件的图形目标在工作空间中的位置和时间的日志条目。此外,存储子系统1524包括包含用于执行本文所描述的与客户端侧网络节点相关联的程序的可执行指令的产品。

例如,实现所公开技术的某些实施例的功能的各种模块可以被存储在存储子系统1524中。这些软件模块通常由处理器子系统1514执行。

存储器子系统1526通常包括多个存储器,其包括用于在程序执行期间存储指令和数据的主随机存取存储器(ram)1530和存储固定指令的只读存储器(rom)1532。文件存储子系统1528为程序和数据文件提供持续存储,并且可以包括硬盘驱动器、软盘驱动器以及相关联的可移动介质、cdrom驱动器、光驱动器或可移动介质盒。实现所公开技术的某些实施例的功能的数据库和模块,可以已经被提供与诸如一个或多个cd-rom的计算机可读介质上,并且可以由文件存储子系统1528存储。除了其他方面,主机存储器子系统1526包含计算机指令,当该计算机指令由处理器子系统1514执行时使得计算机系统操作或执行本文所描述的功能。如本文所使用的,响应于包括用于此类指令和数据的任何其他本地或远程存储器的主机存储器子系统1526中的计算机指令和数据,在“主机”或“计算机”中或之上运行的过程和软件是在处理器子系统1514上执行。

总线子系统1512提供了使得计算机系统的相应部件和子系统按预期彼此通信的机制。虽然将总线子系统1512被示意性地图示为单个总线,但是总线子系统的备选实施例可以使用多个总线。

计算机系统本身可以是各种类型,包括个人计算机、便携式计算机、工作站、计算机终端、网络计算机、电视、大型机、服务器场或任何其他数据处理系统或用户设备。在一个实施例中,计算机系统包括数个计算机系统,每个计算机系统控制构成大格式显示器1202c的拼接块之一。由于计算机和网络的不断改变的本质,对图15中描绘的计算机系统1310的描述仅旨在作为具体示例用于说明所公开技术的优选实施例。计算机系统的许多其他配置可能具有比图15中所描绘的计算机系统更多或更少的部件。相同的部件和变型也可以构成图13的协作环境中的每一个其他设备1202,以及协作服务器1305和显示数据库1306。

api

出于实现本文中所述技术的示例的目的,这里列出了具有跟随我和位置标记功能的支持使用空间事件映射的应用程序界面api的方面。

套接字请求服务器(websockets)-用于一旦连接,则更新具有相关数据(新笔画、卡、客户端等)的客户端。还处理初始连接握手。

服务请求服务器(https/rest)-用于可缓存响应以及发布数据(即,图像和卡)

客户端侧网络节点根据api进行配置,并且包括相应的套接字请求客户端和服务请求客户端。

所有消息都是单独的utf-8编码的json阵列。例如:

[sender-id,message-type,...]

sender-id是发送消息的客户端的id,如果消息始发于服务器,则为“-1”。sender-id在连接到服务器的所有客户端中都是唯一的。

message-type是标识剩余自变量和预期动作的简短代码。

建立连接

客户端使用配置服务,来检索环境的配置信息。套接字服务器url由ws_collaboration_service_addresskey而提供。

1)打开websocket并且加入特定工作空间

<collaboration_service_address>/<workspaceid>/socket?device=<device>array=<array_name>

workspaceid(string)是加入的工作空间的id

device(string)是设备类型。所支持的值:显示墙、其他

array(string)是用于多个屏幕实例的标识符。(可选的)

2)加入大厅

大厅允许客户端在知道它将显示的特定工作空间之前,打开web套接字。大厅还提供5位pin,用户可以使用该5位pin,来将工作空间从他们的个人设备(台式机/ios)发送到显示墙。

<collaboration_service_address>/lobby/socket?device=<device>&array=&lt;array_name&gt;

device(string)是设备类型。所支持的值:显示墙、其他

array(string)是用于多个屏幕实例的标识符。(可选的)

3)服务器响应

当客户端与服务器建立新的网络套接字连接时,服务器首先选择唯一的client-id,并且将其以“id”消息发送给具有唯一的client-id的客户端。

4)消息结构

每个消息阵列的第一元素是sender-id,其指定发起消息的客户端。sender-id在服务器上的所有会话中是唯一。从服务器发送到客户端的id和cr消息的sender-id被设置为默认值,诸如-1。每个消息阵列的第二元素是两字符代码。该代码限定阵列中的其余自变量以及预期操作。具有sender-id为-1的消息是源自服务器的消息。

消息类型

官方上支持以下消息类型。自2013年春以来,一直努力在可能时使用he和ve,而非加入新的顶级消息类型。

(1)cs改变会话

(2)echoecho

(3)error误差

(4)idclientid

(5)jr加入房间

(6)rl房间列表

(7)un撤消

(8)up用户权限

(9)vc视口改变

(10)he历史事件

(11)ve易失性事件

(12)disconnect断开

(13)ls列表流

(14)bs开始流

(15)es结束流

(16)ss流状态

(17)oid对象id预留

1)cs改变会话

通知工作空间已经改变的显示阵列中的客户端或兄弟节点。当服务器收到将工作空间发送到显示墙的请求时,它将该消息发送到客户端。

//server--&gt;client

[sender-id,"cs",workspaceid]

sender-id总是为-1(指示服务器发起消息)

workspaceid(string)是工作空间要切换到的id

2)echoecho

将可选本体回传(echo)到发起端客户端。被用于验证套接字连接和服务器是否仍然正常。

//client--&gt;server

[sender-id,"echo","foo","bar"...]

//server--&gt;client

[-1,"echo","foo","bar"...]

在“echo”之后,消息可以采取任何自变量。如果服务和客户端的套接字连接正常,则它们将全部回传到客户端。当使用echo消息来验证套接字的健康状况时,我们建议如下:

在echo消息之间等待至少5秒钟

在假设网络或服务器问题之前,需要连续2次echo失败

该消息已加入协议,因为chrome和其他受支持的浏览器中的websockets的当前实现方式在网络连接中断时,未正确改变readystate或启动onclose。

3)error误差

通知客户端服务器侧上的误差。

//server-&gt;client

["-1","error",target-id,message]

target-id是误差影响的会话中对象的guid

message是关于误差的消息。

该消息仅由服务器发送,并且目前仅在异步处理期间上传失败时使用。

4)idclient-id

当客户端连接到套接字时,服务器发送该消息。客户端需要存储所指派的client-id,以用于后续套接字请求。

//server--&gt;client

["-1","id",client-id]

client-id(string)是新加入的客户端的id

5)jr加入房间

房间是客户可以订阅的通信信道。可以存在特定工作空间(会话)、显示阵列或潜在的其他客户端组的信道。服务器向连接至特定房间的所有客户端重复/发送消息,这是因为事件发生在该房间。客户端加入房间以获取用于该显示阵列或工作空间(会话)的消息。加入房间请求有几种类型。

一般jr

如果知道id,则加入任何房间。

//server&lt;--client

[sender-id,"jr",room-id,[data]]

room-id可以包含大厅或工作空间id中的一个

数据是通配符自变量集合,其应当用于初始化房间。

大厅jr

加入大厅信道。由希望在不显示工作空间的同时而保持网络套接字打开的客户端使用。

//server&lt;--client

[sender-id,"jr","lobby"]

会话jr

加入特定工作空间(会话)的房间。

//server&lt;--client

[sender-id,"jr","session",workspace-id]

workspace-id是工作空间(工作空间)的id

阵列jr

加入用于特定显示阵列的房间。

arrayid(string)是显示阵列的id

x(integer)是该显示的x偏移量

y(integer)是该显示的y偏移量

width(integer)是该显示的宽度

height(integer)是该显示的高度

房间加入响应:

服务器利用房间消息响应于成功的房间加入(jr)消息。

一般房间

//server--&gt;client

["-1","room",[room-id],[databag]]

room-id包含以下各项中的一项:大厅或工作空间

databag是变量的房间特定包

大厅房间

//server--&gt;client

["-1","room","lobby",{pin:pin-code}]

pin包含显示墙认证的pin

会话房间

//server--&gt;client

["-1","room","session",{"uid":"su5dvpxbfnygcesijbou","name":"dec16

release","sharing_link":"https://portal.bluescape.com/sessions/1357/shares"}]``

*‘uid’是工作空间的id

*‘name’是在客户端中示出的工作空间的名称

*‘sharing_link’是到用户可以与其他人共享该工作空间的门户页的链接

6)rl房间列表

通知客户端成员资格。房间成员资格包括关于客户端访问与你相同的房间的信息。

//server--&gt;client

["-1","rl",roommembershiplist]

roommembershiplist(房间成员资格对象阵列)

房间成员资格对象是具有以下密钥的散列

name是用户或设备名称

device_type是用户所在设备的类型,当前为显示墙或其他设备。(已弃用)

clientid是该设备的clientid

clienttype是客户端的类型(浏览器、ipad或显示墙)

viewport(optional)是如果客户端提供视口rect,则服务器将向所有客户端重复该视口。

7)un撤销

撤消最后一个可撤销的动作(移动,设置文本、笔画等)。

//server&lt;--client

[sender-id,"un",region-id]

//server--&gt;client

[client-id,'undo',target-id,removedeventid]

撤消示例:移动窗口,然后撤消该移动

以下示例图示移动,以及该移动如何撤消。

服务器从工作空间历史中移除历史事件,并且通知被订阅到房间的所有客户端该记录将不再是工作空间历史时间轴的一部分。经由httpapi对未来的历史请求不会包括撤消事件(直到我们实现重做为止)。

8)up用户权限

获取当前用户对这个工作空间的权限。只有当客户端作为特定用户的代理人时才相关,只有当使用公钥认证(显示墙)时不相关。

//server--&gt;client

[sender-id,"up",permissions]

permissions是权限类型的哈希和指示用户是否具有该权限的真/假。目前,唯一权限是指示可以与其他人共享工作空间的用户的“can_share”。

9)vc视口改变

更新一个客户端的视口已经改变的会话中的其他客户端。这是为了支持“跳到用户的视图”和“跟随我”特征而被设计。客户端首次进入会话时,发送视口改变“vc”事件。这确保其他客户端能够跟随他们的移动。当处理传入视口改变“vc”事件时,客户端保持由clientid键入的视口的缓存。这是为了处理具有缺少视口的房间列表成员资格(rl)事件在相关联的vc事件之后到达的情况。将目标视口改变为修订的目标视口可以包括在一个或另一尺寸或两者中的视口大小的改变,这不会维护视口的长宽比。目标视口中的改变还可以包括视口的页面缩放的改变。当“跳转到用户视图”或“跟随我”模式下的主客户端视口接收到第一“vc”记录时,它是用于将主客户端侧视口的可显示区域映射到目标视口的区域的指令。随后的“vc”记录使得主体客户端侧视口被重新映射到目标视口的可显示区域。当“跳转到用户的视图”或“跟随我”特征被禁用时,主体客户端视口返回到其先前的窗口。

//server&lt;--&gt;client

[sender-id,"vc",viewport-rect]

viewport-rect是表示发送客户端上可查看的工作空间的区段的形式为[x1,y1,x2,y2]的阵列。

10)he历史事件

历史事件是持久化到数据库的数据片段。重新创建视觉工作空间所需的任何信息都应经由he消息而被发送到协作服务。

示例:

创建注解、图像和其他小部件

移动小部件

设置或更新小部件的属性(例如,注解文本、标记的位置)

删除小部件

当服务器接收到历史事件时,它执行以下各项:

为事件指派唯一的id

将事件持久化到数据库

将事件与其id一起广播到被连接到工作空间的所有客户端

历史事件基本消息格式

//server&lt;--client

[client-id,"he",target-id,event-type,event-properties]

client-id(string)是发起端客户端的id

target-id(string)是与该事件相关的目标对象/小部件/app的id

event-type(string)是任意事件类型

properties(object)是描述事件相关键/值的json对象

regionid(string)是如果在画布区域中创建对象,则为画布区域标识符(可选的,如果包含在由客户端发送的历史事件中,则将包含该区域标识符)

消息中包括的所有属性都将被存储在服务器上并且被回传到客户端。他们也将被包括在通过http而被发送的历史中。

//server--&gt;client

[client-id,"he",target-id,event-id,event-type,event-properties]

client-id(string)是发起端客户端的id

target-id(string)是与该事件相关的目标窗口的id

event-id(string)是数据库中事件的id

event-type(string)是任意事件类型

properties(object)是描述用于事件的相关键/值的json对象

regionid(string)是如果在画布区域中创建对象,则为画布区域标识符(可选的,如果包含在由客户端发送的历史事件中,则将包含该区域标识符)

批量历史事件

为了确保紧耦合事件的排序,可以通过将事件有效负载改变为事件有效负载的阵列,来批量发送许多消息。

//server&lt;‐‐client

[client‐id,"bhe",[event1,event2,event3,event4]]

在这种情况下,每个事件是作为标准web套接字历史消息发送的分组。事件结构是:

[targetid,eventtype,props]

///

因此,clientid部分不重复,但所有其他都是标准事件。

当前历史事件类型

create是向工作空间添加小部件

delete是从工作空间移除小部件

position是更新工作空间中小部件的大小或位置

template是改变卡模板(背景颜色)

membership是更新目标子节点。被用于组

pin是pin或unpin小部件

stroke是将笔或橡皮擦笔画添加到小部件

text是设置或更新注解的文本和/或文本格式化。

markercreate是创建位置标记

markermove是移动现有位置标记

markerdelete是删除现有位置标记

tsxappevent是用于创建、删除和更新tsx小部件(诸如webtsxappevent)

浏览器

navigate是用于导航到组文档内部的不同页面(ms文档/pdf)

小部件和历史事件

*浏览器客户端支持接收这些消息的备选版本,但不将其发送到其他客户端。

历史事件细节

注释

注释被存储在历史数据库中,但与具体对象而非平面上的位置相关联。

服务器将在注释的正文中将‘名称’附加到属性对象中。父属性是可选的,并且是id

[client‐id,"he",comment‐id,"delete"}]

[client‐id,"he",comment‐id,"text",{"text":"textofthecomment"}]创建

客户端将‘创建’发送到协作服务器,以向工作空间添加小部件。对于‘创建’消息,target-id是包含元素的id,通常是workspace-id。

通用小部件创建示例

属性

id(string)是小部件的唯一标识符

type(string)是小部件的类型

regionid(string)是如果对象是在画布区域中创建,则为canvas区域

大多数小部件还将具有位置属性,其通常是rect和order,但可能是点或其他表示。

卡创建示例

属性

id(string)是窗口的唯一标识符

basename(string)是背景图像文件名称

ext(string)是背景图像文件扩展名

rect(object)是窗口的位置

actualwidth(int)是背景图像宽度(以像素为单位)

actualheight(int)是背景图像的高度(以像素为单位)

order(int)z次序

type(string)是可以具有文本的对象的“注解”、其他对象的“图像”

regionid(string)是如果对象是在画布区域中创建,则为canvas区域

hidden(boolean)是窗口当前是否被隐藏

text(string)是包含在注解中的文本(可选的)

styles(object)是注解中包含的文本的样式(可选的)

pdf创建示例

属性

type(string)“pdf”

id(string)是pdf的唯一标识符

assetpath(string)是资产在资产服务器上的位置。使用配置服务获取资产基本路径。

rect(object)是窗口在工作空间中的位置

actualwidth(int)是最宽页面在pdf中的宽度,其与actualheight结合以构建“边界框”

actualheight(int)是最高页面在pdf中的高度,其与actualwidth结合以构建“边界框”

filename(string)是pdf的原始文件名

order(int)是z次序

hidden(boolean)是窗口当前是否被隐藏

pin(boolean)是pdf是否被固定(pin)在工作空间上的一个位置

regionid(string)是如果对象是在画布区域中创建,则为画布区域(可选的)

组创建示例

//client"-&gt;server

[client"id,

"he",

target-id,

"create",

{"type":"group",

-id":"s3as2b392s8f62fce",

-children":[]}]

属性

type(string)是“组”

id(string)是组的唯一标识符

children(array)是应作为组的一部分的小部件的target-ld的阵列

通用组位置示例

//client--&gt;server

[client-id,he,groupid,'position',{"rect":[0,0,0,0],"order":4}]

属性

rect(object)是组的rect。被指定为x1、y1、x2、y2

order(int)是目标组的z次序

成员资格

替换目标对象的子节点。被用于分组项。

//server&lt;‐‐client

[client‐id,"he",target‐id,"membership",{"children":[53a52b39250f62fce,53a52b39250f62fce]}]

//server‐‐&gt;client

[client‐id,"he",target‐id,event‐id,"membership",{"children":[53a52b39250f62fce,53a52b39250f62fce]}]

特性

children(array)是必要的。阵列包含至少一个小部件id,以包括在组中。为了移除所有子节点,替代地应当使用删除消息。

组文档创建示例

//server‐‐&gt;client

[client‐id,

"he",

target‐id,//groupdocumentid

event‐id,

"create",

{

"type":"document",

"rect":[x1,y1,x2,y2]

"maxwidth":123,

"maxheight":456,

"layout":"stacked",

"title":"titleofthisdocument",

"asseturl":"xxx/xxx/xxx.docx",

"hidden":true,

"pin":false,

"activechildid":"id1838094221",

"children":[

"id0398749123",

"id1838094221",

"id2849239042",

"id3849012830"]}]

特性

type(string)是“groupdocument”

activechildid(string)是活动的子节点id,诸如当前显示的pdf/doc页面

children(array)是子节点(页面)对象id阵列,阵列次序表示子节点(页)次序。

layout(string)是限定客户端布局,以渲染该组文档。

呈现创建示例

//client‐‐&gt;server

[client‐id,

"he",

target‐id,

"create",

{"type":"presentation",

"id":"53a52b39250f62fce",

"children":[]}]

属性

type(string)是“呈现”

id(string)是组的唯一标识符

children(array)是应当是以呈现次序呈现的一部分的小部件的target-id的阵列

呈现创建示例

//server‐‐&gt;client

[client‐id,

"he",

target‐id,//presentationid

event‐id,

"create",

{

"type":"presentation",

"children":[

"id0398749123",

"id1838094221",

"id2849239042",

"id3849012830"]}]

属性

type(string)是“呈现”

children(array)是子节点(页面)对象id的阵列,阵列次序表示子节点(页面)次序。

删除

从工作空间移除小部件。

//server&lt;--client

[client-id,"he",target-id,"delete",{"hidden":true}]

//server--&gt;client

[client-id,"he",target-id,event-id,"delete",{"hidden":true}]

位置

被用于在移动、弹出、调整大小等动作之后,保存窗口小部件的位置。通用小部件位置示例

//server&lt;--client

[client-id,"he",target-id,"position",{new-position}]

//server--&gt;client

[client-id,"he",target-id,event-id,"position",{new-position}]

属性

new-position(object)是以某种方式表示对象的新位置。参见窗口示例。

通用窗口位置示例

//server&lt;--client

[client-id,"he",target-id,"position",{"rect":[-1298,-390,-1018,-230],"order":4}]

//server--&gt;client

[client-id,"he",target-id,event-id,"position",{"rect":[-1298,-390,-1018,-230],"order":4}]

属性

rect(object)是目标窗口的位置。被指定为x1、y1、x2、y2

order(int)是目标窗口的z次序

模板

用于改变标记的模板。这允许改变背景颜色。

注解模板示例

//server--&gt;client

[client-id,"he",workspace-id,event-id,"template",{"basename":"sessions/all/beige"}]

属性

basename(string)是新背景的文件名称。文件必须已经在协作服务器上。模板列表可以经由/card_templates.json处的http-协议获得

用于固定小部件,并且防止用户移动或调整该小部件的大小。还用于移除现有固定(pin)。

通用小部件位置示例

//server--&gt;client

[client-id,"he",workspace-id,event-id,"pin",{"pin":true}]

属性

pin(boolean)是真为固定,假为去固定

笔画

用于向小部件或工作空间背景添加笔画。

通用笔画示例

属性

size(number)是使用包含对象的坐标空间的笔画的直径。画布上的笔画在世界空间内调整大小,而小部件上的笔画在其父窗口小部件空间内调整大小。

brush(number)是渲染笔画时要使用的刷子类型。1是画刷,而2是擦刷。

color(number)是笔画颜色的r/g/b/a值。忽略擦除笔画(尽管可能仍然存在)。

locs(array)是格式为[10,1,10,2,12,3]的笔画位置,其中坐标在阵列中是成对的[x,y,x,y,x,y,...]。与大小类似,位置在包含对象的坐标空间内。

regionid(string)如果笔画是在画布区域中被创建,则为画布区域(可选的)。

渲染注解:笔画应当用以笔画的第一点和最后一点为中心的端帽(endcap)而被渲染。端帽的直径应当等于刷子大小。渲染端帽是每个客户端的责任。

文本

在小部件上设置文本和样式。文本属性和样式属性均是可选的。通用文本示例

属性

text(string)是要在小部件上图示的文本字符串

style(hash)是要应用于文本的css样式

标记创建(markercreate)

在工作空间的特定位置创建位置标记(映射标记、路径点)

示例

属性

createtime(int)是创建时间(unix时间)

name(string)是位置标记的标签

y(number)是标记的y位置

x(number)是标记的x位置

template(string)是标记模板名称

浏览器客户端所接受的备选形式

标记移动(markermove)

在工作空间中将现有位置标记(地图标记、路径点)移动到新位置。

示例

属性

y(number)是标记的y位置

x(number)是标记的x位置

浏览器客户端所接受的备选形式

标记删除(markerdelete)

删除现有位置标记。

示例

//server&lt;--client

[client-id,"he",marker-id,"markerdelete",{}]

//server--&gt;client

[client-id,"he",marker-id,event-id,"markerdelete",{}]

浏览器客户端所接受的备选形式

tsxappevent向tsx系统上的各种小部件发送历史事件。示例

属性

payload(object)是该tsxappevent所需的特性messagetype(string)是消息的类型

创建web浏览器的示例

属性

payload(object)是创建浏览器所需的细节

x(number)是标记的x位置

y(number)是标记的y位置

worldspacewidth(number)是在世界空间中的宽度

worldspaceheight(number)是在世界空间中的高度

windowspacewidth(number)是在窗口空间中的宽度

windowspaceheight(number)是在窗口空间中的高度

version(number)是#todo

url(number)是url,该浏览器小部件应指向用于创建用于web浏览器小部件的浏览器targettsxappid*(string)“webbrowser”的messagetype*(string)“createbrowser”

删除web浏览器的示例

导航(navigate)

导航到有效负载中的不同项的示例。例如,这可以被用于导航到url的浏览器小部件。

[

client‐id,

"he",

target‐id,//group/presentationormaybebrowserurlid

"navigate",

payload//navigatetothispage

]

(11)ve易失性事件

数据库中没有记录易失性事件,因此它们对于正在进行中的流传输事件(如在屏幕上拖动卡)有用,并且一旦用户抬起手指,就会使用historyevent来记录其最终的位置。

易失性事件基本消息格式

//server&lt;--&gt;client

[client-id,"ve",target-id,event-type,event-properties]

client-id(string)是发起端客户端的id

target-id(string)是与此事件相关的目标窗口的id

event-type(string)是任意事件类型

properties(object)是描述事件相关键/值的json对象

当前易失性事件类型

sb是开始新笔画。

sc是继续先前开始的笔画。

se是结束笔画

position是用于与其他客户端共享不应该被持久化的位置。例如,图示了正在被实时拖动的窗口。

bf是开始跟随:用户a开始跟随用户b。用于通知用户a用户b正在跟随。

ef是结束跟随:用户b不再跟随用户a。用于通知用户a用户b不再跟随。

///

按小部件类型的易失性事件

工作空间

sb是开始笔画。被用于在一个客户端上渲染笔画,同时它们正在在另一客户端上绘制。

sc是通过给出要包括的另一点,来继续先前开始的笔画。被用于在另一客户端上绘制的同时而渲染笔画。

se是结束先前开始的笔画。

bf是开始跟随:用户a开始跟随用户b。用于通知用户a用户b正在跟随。

ef是结束跟随:用户b不再跟随用户a。用于通知用户a用户b不再跟随。

注解

position是实况更新注解的位置,而同时其正在被另一用户移动。

sb是开始笔画。被用于在一个客户端上渲染笔画,同时他们正在在另一客户端上被绘制。

sc是通过给出要包括的另一点,来继续先前开始的笔画。用于渲染笔画,同时他们正在在另一客户端上被绘制。

se是结束先前开始的笔画。

图像

position是实况更新注解的位置,同时其正在被另一用户移动。

sb是开始笔画。被用于在一个客户端上渲染笔画,同时他们正在在另一客户端上被绘制。

sc是通过给出要包括的另一点,来继续先前开始的笔画。被用于渲染笔画,同时他们正在在另一客户端上被绘制。

se是结束先前开始的笔画。

易失性事件细节

以下字段是几个易失性事件的特性。

stroke-id是客户端选择笔画-id。当前,它们是由以点分隔的、以增加的整数所组成的sender-id。这是为了在所有客户端之间的服务器上下文内使其唯一。

target-id是笔画可以附加到工作空间中的特定目标(容器)。在属于小部件的笔画的情况下,target-id字段将包含小部件的id。通过使其target-id与工作空间id相同,来指定工作空间中专用于主画布的笔画。位置-ve

被用于广播围绕工作空间移动的窗口的中间步骤。

通用位置示例

//server&lt;--&gt;client

[client-id,"ve",target-id,"position",{position-info}]

属性

position-info是关于小部件的新位置的信息

窗口位置示例

//server&lt;--&gt;client

[client-id,"ve",target-id,"position",{"rect":[-1298,-390,-1018,-230],"order":4}]

属性

rect(object)是目标窗口的位置

order(int)是目标窗口的z次序

sb

被用于向其他客户端广播笔画的开头。

属性

x,y(int)是这个笔画的起点

strokeid(string)是新笔画的id

sc:

继续笔画id指定的笔画。

//server&lt;--&gt;client

[client-id,"ve",target-id,"sc",{"x":100,"y":300,"strokeid":"395523d316e942b496a2c8a6fe5f2cac"}]

属性

x,y(int)是这个笔画的新终点

strokeid(string)是新笔画的id

se:

结束由stroke-id指定的笔画。

//server&lt;--&gt;client

[client-id,"ve",target-id,"se",{"strokeid":"395523d316e942b496a2c8a6fe5f2cac"}]

stroke-id(string)是所继续的笔画的id

bf:

开始跟随:用户a开始跟随用户b。被用于通知用户a用户b正在跟随。对于这个全局易失性事件,target-id是会话id。被跟随的用户将更新ui,以指示用户b正在跟随。

//server&lt;‐‐&gt;client

[follower‐client‐id,"ve",session‐id,"bf",{"clientid":"395523d316e942b496a2c8a6fe5f2cac"}]

属性

clientid(string)是被跟随的客户端的id

ef:

结束跟随:用户b不再跟随用户a。被用于通知用户a用户b不再跟随。对于这个全局易失性事件,target-id是会话id。被跟随的用户将更新ui以指示用户b不再跟随。如果用户b离开会话,则用户a将接收到不包含用户b的房间列表消息。用户a的房间列表将被重建,而不再示出作为跟随者的用户b。

//server&lt;‐‐&gt;client

[follower‐client‐id,"ve",session‐id,"ef",{"clientid":"395523d316e942b496a2c8a6fe5f2cac"}]

属性

clientid(string)是不再被跟随的客户端的id

示例交互:移动对象

说明historyevent/volatileevent相关改变中的一些改变的好示例是移动对象。当通过拖动正在移动/调整对象大小时,一系列易失性事件(ve)被发送到服务器,并且被重新广播给订阅工作空间的所有客户端:

一旦用户完成移动对象,则客户端就应当发送历史事件,以指定对象的rect和次序:

服务器将利用新持久化的he记录作出响应。注意包含记录的eventid。

注解:eventid也将被包括在经由httpapi获取的历史中。

12)disconnect断开

通知由同一用户打开的其他app实例,来关闭其连接并且停止重新连接尝试。这是被浏览器客户端消消费,以防止当用相同工作空间打开两个选项卡时,看到“疯狂重新连接”问题。

//server--&gt;client

[-1,"disconnect"]

13)ls列表流

通知客户端列表中的当前流。由其他事件触发,与房间列表类似。

//server‐‐&gt;client

[send‐id,"ls",[streamlistforsession]]

sender-id始终为-1(指示服务器发起了该消息)

流列表是对象阵列,其中每个对象包含以下字段:

sessionid(string)是包含会议的工作空间的id

conferenceid(string)是该工作空间中所有用户连接至的会议会话的id

clientid(objectid)是广播该具体流的客户端的id

streamid(string)是该具体av流的id

14)bs开始流

通知服务器新av流开始。服务器利用liststreams消息做出响应。

//server&lt;‐‐client

[sender‐id,"bs",conferenceid,conferenceprovider,streamid,streamtype]

sender-id是启动流的用户的clientid

conferenceid(string)是工作空间中所有用户连接至的会议会话的id

conferenceprovider(string)是会议的类型,例如tokbox或twilio

streamid(string)是该具体av流的id

streamtype(string)是音频、视频或屏幕共享

15)es结束流

通知服务器新av流结束。服务器利用liststreams消息做出响应。

//server&lt;‐‐client

[sender‐id,"es",conferenceid,streamid]

sender-id是启动流的用户的clientid

conferenceid(string)是该工作空间中所有用户连接至的会议会话的id

streamid(string)是该具体av流的id

16)ss流状态

通知服务器现有av流的改变状态。服务器利用liststreams消息做出响应。

//server&lt;‐‐client

[sender‐id,"ss",streamid,streamtype]

sender-id是启动流的用户的clientid

streamid(string)是该具体av流的id

streamtype(string)是音频、视频或屏幕共享

17)oid对象id预留

使用这个来创建新的唯一对象id,其可以被用于创建创建对象的新历史事件。

```javascript

//server&lt;--client

[sender-id,"oid"]

服务器利用以下各项做出响应:

//server--&gt;client

["-1",'oid',&lt;new-object-id&gt;]

上文所描述的api提供了一个示例消息结构。还可以使用其他结构,以适合特定实现方式。

如本文中所使用的,信息项的“标识”不一定要求信息项的直接规范。通过简单地通过一个或多个间接层来引用实际信息,或者通过标识一起足以确定实际的信息项的一个或多个不同的信息项,可以在字段中“标识”信息。另外,术语“指示”在本文中用于意指与“标识”相同。

此外,如本文中所使用的,如果前导信号、事件或值影响给定信号、事件或值,则给定信号、事件或值“响应于”前导信号、事件或值。如果存在中间处理元件、步骤或时间段,则给定信号、事件或值仍然可以“响应于”前导信号、事件或值。如果中间处理元件或步骤组合多于一个信号、事件或值,则处理元件或步骤的信号输出被视为响应于信号、事件或值输入中的每一个。如果给定信号、事件或值与前导信号、事件或值相同,则这仅仅是种退化情况,其中给定信号、事件或值仍被认为是“响应于”先前信号、事件或值。类似地,限定给定信号、事件或值对另一信号、事件或值的“依赖关系”。

申请人在本文中单独地公开了本文中所描述的相应单个特征以及两个或更多这样的特征的任何组合,使得这样的特征或者组合能够根据本领域技术人员的公知常识基于作为一个整体的本说明书来实现,而无论这样的特征或者特征组合是否解决本文中所公开的任何问题,并且这不对权利要求的范围造成限制。申请人指示所公开的技术的方面可以由任何这样的特征或特征的组合组成。鉴于上述描述,对于本领域技术人员而言,显而易见的是可以在所公开的技术的范围内进行各种修改。

为了说明和描述的目的,提供了所公开技术的优选实施例的上述描述。它不是穷举的,也不是将所披露的技术限制为所公开的精确形式。显然,多个修改和改变对于本领域技术人员将是显而易见的。例如,虽然本文中所描述的显示器是大格式,但是小格式显示器还可以被布置成使用多个绘制区域,尽管多个绘制区域对于至少大到12英尺宽的显示器是更有用的。具体而非限制性地,通过本专利的背景技术部分提出的或通过引用并入的材料所描述的任何和所有改变,通过引用被特定地并入本文中所公开的技术的实施例的描述中。另外,关于任何一个实施例,本文中通过引用而描述、提出或并入的任何和所有改变也将被认为关于所有其他实施例而进行教导。为了最好地解释所公开的技术的原理及其实际应用,本文中所描述的实施例被选择和描述,从而使得本领域技术人员能够理解针对各种实施例以及通过适于所设想的具体应用的各种修改公开的技术。所公开的技术的范围旨在由所附权利要求及其等同来限定。

与本文中的所有流程图一样,应当领会许多步骤可以组合、并行执行或以不同的顺序执行,而不影响所实现的功能。在一些情况下,正如读者将领会的那样,仅当也做出某些其他改变时,步骤的重新布置将实现相同结果。在其他情况下,如读者将领会,仅当满足某些条件时,步骤的重新布置将实现相的结果。此外,应当领会本文中的流程图仅图示与所公开的技术的理解有关的步骤,并且应当理解用于实现其他功能的许多附加步骤可以在所示的那些步骤之前、之后和之间被执行。

虽然通过参考上文所详述的优选实施例和示例公开所公开的技术,但是应当理解这些示例旨在作为说明性的而非限制性。应当设想,本领域技术人员将容易想到修改和组合,这些修改和组合将在公开的技术的精神和所附权利要求的范围内。应当设想,本文中所描述的技术可以使用空间事件映射的其他协作数据结构而被实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1