具体实施方式
图1是示出示例***100的框图。***100包括客户机设备102A到102N(统称为“客户机设备102”)。客户机设备102是计算设备,例如个人计算机和手持设备。用户104A到104N(统称为“用户104”)是使用这些客户机设备102的人。
***100还包括服务器***106。服务器***106是包括了一个或多个计算设备的***。客户机设备102能够通过网络108与服务器***106通信。网络108是通信网络,例如因特网或局域网。网络108可包括有线和/或无线电信链路。
服务器***106主存社交网络服务。社交网络服务包括聚焦于建立并反映人们之间的社交网络的社交网络站点。客户机设备102通过网络108与服务器***106通信以允许用户104访问社交网络服务。
如在此文档中所述,用户104使用客户机设备102来打开社交网络站点中的网页。网页包含画布。画布包括在网页中的一个区域,在该区域中用户104可以合作创建绘画。绘画可以包括各种元素,例如直线、曲线、矩形、圆、文本、箭头、图像等等。而且,在一些实施例中,绘画可以包括图片元素。图片元素是在该绘画中的位图图像。画布还可以包括使得用户104能将元素加入绘画中的屏幕上的工具。例如,画布可以包括使得用户104能将圆、矩形、线、文本和其他类型的元素加入绘画中的屏幕上的工具。
当在客户机设备102上打开网页时,客户机设备102在用户104对绘画进行改变的近似相同的时间、动态更新所述绘画以反映由用户104对绘画做出的改变。这样,如果在两个或更多的客户机设备102上打开网页时,这些客户机设备的用户可以在他们做出改变时就看到对绘画的这些改变。例如,如果在客户机设备102A和客户机设备102B上打开网页且用户104B对绘画做出改变,则用户104A能够在用户104B正在进行改变的近似相同的时间看到所述改变。
随后,一些或所有的用户104能够关闭该网页。当用户104关闭网页时,绘画的内容并不会丢失。而是将绘画的状态保留,这样当用户104重新打开该网页时,用户104能够继续编辑该绘画,而不需要从头开始。
用户104中的各个用户可以编辑绘画而不需要在用户104的其他用户的客户机设备102上打开网页。例如,用户104的第一用户可以是仅有的打开网页的用户。在这个示例中,第一用户可以编辑绘画并随后将网页关闭。当第一用户关闭网页时,绘画的内容(即绘画中的元素和这些元素的属性)处于第一状态。在本示例中,用户104的第二用户在第一用户已经关闭绘画后打开网页。当第二用户打开网页时,该绘画反映了第一用户所做出的改变。在这个示例中,第二用户可以随后对绘画做出进一步的改变。随后,第一用户重新打开该网页。当第一用户重新打开该网页时,绘画的内容处于第二状态。该第二状态是由第二用户对绘画的改变而产生的,而这时所述网页在第一用户的客户机设备上已关闭。
图2是说明客户机设备102A的示例细节的框图。应该理解客户机设备102的其他客户机设备可以具有与图2的示例中的客户机设备102A所说明的细节相类似的细节。在一些实施例中,客户机设备102A和用户104A的下述描述同样可应用于客户机设备102和用户104中的其他客户机设备和用户。
客户机设备102A是计算设备。在各个实施例中,客户机设备102A可以是各种类型的计算设备。例如,客户机设备102A可以是个人计算机、膝上计算机、手持计算机、上网本计算机、智能电话、平板计算机、车载计算机、电视机顶盒、视频游戏控制台、手持视频游戏设备或另一类型的计算设备。
如在图2的示例中所述,客户机设备102A包括网络接口200。网络接口200使得客户机设备102A能够通过网络108与其他计算设备通信。客户机设备102A还提供了浏览器202。浏览器202是使得用户104A通过通信网络打开诸如网页的文档的软件应用程序。在一些实施例中,当客户机设备102A的处理单元执行存储在一个或多个计算机存储介质上的某些计算机可执行指令时,客户机设备102A提供所述浏览器202。示例类型的浏览器包括微软的INTERNET EXPLORER浏览器、MozillaFirefox web浏览器、Google的Chrome web浏览器、苹果的Safari web浏览器、RIM的BlackBerry web浏览器以及Opera web浏览器等等。
浏览器202从用户104A接收输入以打开由服务器***106主存的网站。作为响应,浏览器202使得网络接口200将网页请求204发送给服务器***106。网页请求204是浏览器202对表示所请求的网页的数据的一种请求。在各种实施例中,网页请求204以各种方式被格式化。例如,在一些实施例中,网页请求204被格式化为超文本传输协议(HTTP)请求。随后,浏览器202通过网络接口200接收网页响应206。网页响应206包含表示所请求的网页的数据。
当浏览器202接收网页响应206时,浏览器202处理表示网页的数据以准备网页供显示。当浏览器202处理表示网页的数据时,浏览器202确定该网页是否包括画布。如果浏览器202确定该网页包括画布,浏览器202启动客户机画布模块208。客户机画布模块208管理所述画布。
为了管理画布,客户机画布模块208维持客户机模型210。客户机模型210包括表示画布中绘画的数据。在各种实施例中,客户机模型210以各种方式表示绘画。例如,客户机模型210可以包括表示绘画的XML元素的层次。在该示例中,XML元素的层次符合开放办公室(Open Office)XML(ECMA-376)标准或另一标准中规定的DrawingML格式。在本示例中,XML元素的层次可以包括整体表示绘画的XML元素。在该XML元素中是其它表示绘画中各个元素的XML元素。绘画中各个元素包括线、矩形、文本、圆等。每个XML元素包括规定了元素的属性的各属性。
在浏览器202打开网页之后,客户机画布模块208从用户104A接收输入以编辑绘画。例如,客户机画布模块208可以接收将元素加入到绘画中、修改绘画中现有元素的属性、从绘画中删除现有元素的输入。响应于这种输入,客户机画布模块208更新客户机模型210以反映由所述输入指示的改变。而且,客户机画布模块208更新所述网页中的画布,这样,绘画反映了由所述输入指示的改变。
另外,当客户机画布模块208从用户104A接收对绘画做出改变的输入时,客户机画布模块208使得网络接口200将客户机消息212发送给服务器***106。客户机消息212指定了对绘画的改变。例如,如果输入是从绘画中删除元素,客户机消息指示已经从该绘画中删除了该元素。通过这种方式,服务器***106能跟得上客户机设备102处的绘画的状态。
在各种实施例中,网页请求212以各种方式被格式化。例如,在客户机模型210包括表示绘画的XML元素层次的实施例中,客户机消息212通过指定对客户机模型210中的一个或多个XML元素的改变来指定对绘画的改变。
客户机画布模块208还从服务器***106接收服务器消息214。服务器消息214指定了由其他用户对绘画做出的改变。客户机画布模块208更新客户机模型210以反映在服务器消息214中指定的改变。通过这种方式,客户机画布模块208能跟得上服务器***106处的绘画的状态。另外,客户机画布模块208动态地更新显示给用户104A的绘画以反映在服务器消息214中指定的改变。
在各种实施例中,服务器消息214以各种方式被格式化。例如,在客户机模型210包括表示绘画的XML元素层次的实施例中,服务器消息214通过指定对客户机模型210中的一个或多个XML元素的改变来指定对绘画的改变。
因为多个用户可以同时编辑绘画,就会产生冲突的改变。例如,用户104中的一个用户(例如用户104A)可能尝试删除一个特定的元素,而用户104中的另一个用户(例如用户104B)则尝试修改该特定元素的一个或多个属性。因此,在用户104A做出的改变和用户104B做出的改变之间存在冲突。为了避免这样的冲突,绘画中的元素典型地是不能被修改或删除的,除非用户104首先选择这些元素。无论何时用户104选择绘画中的元素,客户机设备102都将锁定请求发送给服务器***106。锁定请求指定了所选择的元素。当服务器***106接收了指定绘画中特定元素的锁定请求,服务器***106锁定该特定元素,这样,在该特定元素被选择时没有其他的用户可以修改或删除该元素。通过这种方式,当第二用户已经选择了给定元素时,服务器***106防止了第一用户对该给定元素的修改或删除,反之亦然。
如在图2中的示例中所述,客户机设备102A还提供了剪贴板216和应用程序218。在一些实施例中,客户机设备102A通过执行计算机可执行指令提供了剪贴板216和应用程序218。应用程序218使得用户104A能够编辑文档。在各种实施例中,应用程序218能够是多个不同类型的应用程序。例如,应用程序218可以是字处理应用程序(例如微软的Word)、幻灯片演示应用程序(例如微软的记事本应用程序(例如微软的电子邮件应用程序(例如微软的图表编辑应用程序(例如微软的或使用户104A能够编辑文档的另一类型的应用程序。
用户104A能够在网页在浏览器202中打开时,将副本输入提供给浏览器202。在各种实施例中,用户104A可以以各种方式将副本输入提供给浏览器202。例如,用户104A可以选择绘画并随后按下键盘上的键组合(例如control-c)。在另一示例中,当用户104A在画布上右键点击时,浏览器202显示弹出菜单。在该示例中,通过从弹出菜单中选择副本命令,用户104A将副本输入提供给浏览器202。
响应于接收到所述副本输入,浏览器202将客户机模型210复制到剪贴板216。随后,用户104A将绘画粘贴入在应用程序218中打开的文档中。当用户104A将绘画粘贴入文档中时,应用程序218将客户机模型210合并入文档模型。文档模型包括表示该文档的数据。例如,客户机模型210和文档模型可以包括XML元素的层次。在该示例中,应用程序218将客户机模型210中的XML元素的层次合并入文档模型中的XML元素的层次中。在用户104A将绘画粘贴入文档之后,用户104A可以继续编辑绘画,而绘画在文档中。
在一些实施例中,用户104A可以将副本输入提供给应用程序218。副本输入指令应用程序218复制应用程序218中打开的文档中的绘画。作为响应,应用程序218将绘画的模型复制到剪贴板216。例如,在文档模型包括XML元素的层次时,应用程序218将表示绘画的XML元素复制入剪贴板216。随后,用户104A可以指令浏览器202将绘画从剪贴板216粘贴入浏览器202中打开的网页中的画布。例如,当XML元素的层次表示绘画时,浏览器202可以将XML元素的该层次提供给客户机画布模块208作为用于绘画的客户机模型。
在一些实施例中,用户104A能够复制并粘贴绘画中的一些元素。为了这样做,用户104A选择在网页中显示的绘画内的一个或多个单独的元素。随后,用户104A将副本输入提供给浏览器202。作为响应,浏览器202在剪贴板216中生成新的模型。该新的模型表示了绘画中的所选择的元素,而不是绘画中未被选择的元素。用户104A可以随后将粘贴输入提供给应用程序218。作为响应,应用程序218将该新的模型合并入应用程序218中打开的文档的文档模型中。通过这种方式,文档包括了由新的模型(即所选择的元素)所表示的绘画。在将应用程序218打开的文档的绘画中的单独的元素复制并粘贴到浏览器202打开的网页中的绘画中时,会出现类似的处理。
图3示出了示例浏览器窗口300。浏览器窗口300是由浏览器202显示的窗口。浏览器窗口300包括导航控件302。导航控件302使用户104A能够控制导航。
浏览器窗口300还包括网页304。在图3的示例中,网页304包括文本块306。除了文本块306之外,网页包括画布308。画布308包括绘画310。***310包括一组元素312。
画布308还包括绘画控件314A到314F(统称为“绘画控件314”)。为了将元素加入到绘画310,用户104A选择绘画控件314中的一个。随后,用户104A使用输入设备来做出为元素建议位置和/或形状的手势。例如,为了画一条线,用户104A选择绘画控件314A。在该示例中,随后,当光标322位于绘画310内的线应该开始的点时,用户104A按下按键,并且当光标322位于绘画310内的线应该结束的点时松开按键。在另一示例中,为了将文本加入到绘画310,用户104A选择绘画控件314D。在本示例中,当光标322位于绘画310内的出现文本框的一个角的点时,用户104A按下按键,并且当光标322位于绘画310内的出现文本框的对角上的一个相对角的点时,松开按键。在该示例中,用户104A可以使用键盘或其他输入设备来将文本输入文本框中。
在各种实施例中,用户104A以各种方式选择绘画310中的元素。例如,用户104A可以通过将光标322定位在元素之上并按下按键来选择绘画310中的元素。在另一个示例中,用户104A可以通过重复地按特定的键盘按键(例如“tab”)来选择绘画310中的元素。在该示例中,每次用户104A按下特定键盘按键时就会选择绘画310中的不同的元素。在另一个示例中,在触敏显示器上显示浏览器窗口300。在该示例中,用户可以通过触摸触敏显示器上的元素来选择绘画310中的元素。
当元素处于选中状态时,用户104可以删除该元素。在各种实施例中,用户104A执行各种动作来删除元素。例如,用户104A可以通过按下键盘按键(例如“删除”或“退格”)来删除元素。在另一示例中,用户104A可以通过选择屏幕上控件(未示出)来删除元素。
当元素处于选中状态时,用户104A可以修改该元素的一个或多个属性。用户104A可以通过执行不同的动作来修改该元素的不同的属性。例如,用户104A可以通过使用光标322来将元素拖到期望的位置来修改元素的位置。在另一个示例中,用户104A可以通过打开画布308中的色彩选择面板并选择期望的颜色来修改元素的线颜色。
在一些实施例中,网页304是社交网络站点的一部分。例如,网页304可以是用户104A的社交网络档案页面。社交网络档案页面是包含有关用户的个人信息的网页。该用户的社交网络档案页面可以作为该用户身份的电子代表。在另一示例中,网页304可以是社交网络站点中的一组用户的网页。在又另一个示例中,网页304可以是在社交网络站点中的链接到群组网页或用户档案页面的网页。
画布308还包括共享控件316。当用户104选择共享控件316时,浏览器202显示联系人列表。联系人列表是由用户104A指定的具有与用户104A直接社交连接的人的列表。用户104A从联系人列表中选择人员。服务器***106邀请选中的人来查看和/或编辑绘画310。例如,服务器***106可以将电子邮件消息或文本消息发送给选中的人以邀请该选中的人来查看和/或编辑绘画310。
在图3的示例中,画布308还包括许可控件318。当用户104A选择许可控件318时,浏览器202显示许可界面。许可界面使用户104A能够选择哪些其他人员能够查看和/或编辑绘画310。在各种实施例中,许可界面可以包括各种信息并以各种方式被格式化。例如,服务器***106可以将用户104A的社交网络联系人的列表发送给客户机设备102A。用户104A的社交网络联系人是由用户104A指定的具有与用户104A直接社交连接的人员。在该示例中,用户104A可以使用复选框或其他类型的控件来指定这些人中的哪些人被授权查看和/或编辑绘画310。在另一示例中,许可界面可以列出是用户104A的工作同事的人员。在用户104A选择一个或多个人员来查看和/或编辑绘画之后,浏览器202将许可消息发送给服务器***106。许可消息指示哪些用户被授权查看和/或编辑绘画。
另外,画布包括复制控件320。当用户104A选择复制控件320时,浏览器202将绘画310的客户机模型210(或表示绘画310中的选中元素的模型)复制到剪贴板216。
图4是说明服务器***106的示例细节的框图。如上所述,服务器***106包括一个或多个计算设备。在各个实施例中,服务器***106可以是各种类型的计算设备。例如,服务器***106可以包括独立服务器设备、刀片服务器设备、个人计算机、路由器、交换机、桥接、集线器、防火墙设备、负载平衡器、存储设备和其他类型的计算设备。
如在图4的示例中所述,服务器***106提供web服务器400和服务器画布模块402。在一些实施例中,当服务器***106上的一个或多个计算设备执行计算机可执行指令时,服务器***106提供web服务器400和服务器画布模块402。服务器***106还存储了数据库404。在各种实施例中,服务器***106中的一个或多个计算设备存储数据库404。
web服务器400从客户机设备102处接收网页请求406。网页请求406是打开由服务器***106主存的网页的请求。在各种实施例中,网页请求406以各种方式被格式化。例如,在一些实施例中,网页请求406被格式化为超文本传输协议(HTTP)请求。web服务器400发送网页响应408作为对网页请求406的响应。网页响应408包含表示该网页的数据。
而且,当web服务器400从客户机设备102A接收网页请求且所请求的网页包括画布时,服务器画布模块402将客户机设备102A加入到订阅列表410。订阅列表410列出已经打开包括该画布的网页的一些客户机设备102。
随后,web服务器400从客户机设备102接收客户机消息412。客户机消息412指明了由客户机设备102的用户对画布中的绘画做出的改变。例如,客户机消息412可以指明将元素加入到绘画、选择绘画中的元素等等。当web服务器400接收客户机消息412时,服务器画布模块402更新数据库404中的服务器模型414。服务器模型414包含了表示绘画的数据。服务器画布模块402更新服务器模型414以反映由客户机消息412指示的对绘画的改变。例如,服务器模型414可以包括表示绘画的XML元素层次。在该示例中,客户机消息412中的一个可以指示用户104A已经从绘画中删除了给定的元素。在本示例中,服务器画布模块402更新服务器模型414中的XML元素层次以移除表示给定元素的XML元素。
当服务器画布模块402更新服务器模型414以反映对绘画的改变时,服务器画布模块402将服务器消息416发送给订阅列表410中列出的每个客户机设备。服务器消息416指明了对绘画的改变。在各个实施例中,服务器消息416可以以各种方式指明对绘画的状态的改变。例如,如果服务器画布模块402删除了表示绘画中给定元素的XML元素,则服务器消息416指明了已经从服务器模型414删除了该XML元素。通过处理服务器消息416,客户机设备102可以跟得上由其他客户机设备102做出的对绘画的改变。
图5是说明由客户机设备102A执行的示例操作500的流程图。虽然,本文档描述了操作500可由客户机设备102A来执行,但客户机设备102中任意一个都能执行所述操作500。
如图5的示例中所述,当浏览器202确定从用户104A接收到输入时(502),操作500开始。如果没有从用户接收到输入(502处为“否”),操作500前进到图7中标记为“C”的圆。如果从用户104A接收到输入(502处为“是”),浏览器202确定该输入是否是导航输入(504)。导航输入是指令浏览器202打开网页的输入。在各个实施例中,浏览器202可以接收各种类型的导航输入。例如,当用户104A选择后退按键、前进按键、重载按键、在导航栏中输入新地址、点击超链接或提供指令浏览器202打开网页的另一类输入时,浏览器202可以接收导航输入。如果输入是导航输入(504处为“是”),浏览器202将网页请求发送给服务器***106(506)。网页请求是打开网页的请求。随后,浏览器202从服务器***106接收网页响应(508)。网页响应包括表示该网页的数据。随后,浏览器202呈现该网页,以便将网页显示给用户104A(510)。在呈现所述网页之后,操作500重启。
另一方面,如果输入不是导航输入(504处为“否”),客户机画布模块208确定输入是否是画布创建输入(512)。画布创建输入指示用户104A想要在网页中包括画布。在各种实施例中,用户104A可以以各种方式将画布创建输入提供给浏览器202。例如,在一些实施例中,页面可以包括控件,当选择控件时,向浏览器202提供画布创建输入。如果输入是画布创建输入(512处是“是”),客户机画布模块208将包含画布创建请求的客户机消息发送给服务器***106(514)。画布创建请求指令服务器***106在网页中创建新的画布。在一些实施例中,客户机画布模块208可以将画布创建请求自动发送给服务器***106,而不需要来自用户的输入。例如,当加载网页时,客户机画布模块208可以将画布创建请求发送给服务器***106。在将画布创建请求发送给服务器***106之后,操作500重启。
如果输入不是画布创建输入(512处是“否”),客户机画布模块208确定该输入是否是许可输入(516)。许可输入是来自用户104A的为画布设定许可的输入。为画布设定许可的输入支配了哪些其他用户被授权查看和/或编辑画布。在各个实施例中,用户104A以各种方式提供许可输入。例如,客户机设备102A可以将社交网络服务的用户列表显示给用户104A。用户104A可以通过从社交网络服务的用户之中选择用户来提供所述许可输入。在该示例中,没有被选中的用户就没有被授权来编辑绘画。
如果输入是许可输入(516处是“是”),客户机画布模块208将包括许可消息的客户机消息发送给服务器***106(518)。许可消息指令服务器***106设定或更新画布的许可。在发送所述客户机消息之后,操作500重启。如果输入不是许可输入(516处是“否”),客户机画布模块208执行图6中从标记为“B”的圆处开始的操作500的一部分。
图6是说明操作500的第二部分的流程图。在标记为“B”的圆之后,客户机画布模块208确定所述输入是否是元素选择输入(600)。元素选择输入是来自用户104A的选择绘画中现有元素的输入。如果客户机画布模块208确定输入是元素选择输入(600处是“是”),则客户机画布模块208将包括锁定请求的客户机消息发送给服务器***106(602)。随后,客户机画布模块208从服务器***106接收包括锁定响应的服务器消息(604)。锁定响应消息指示服务器***106是否给予客户机画布模块208对现有元素的锁定。因此,当客户机画布模块208从服务器***106处接收锁定响应消息时,客户机画布模块208使用锁定响应消息来确定服务器***106是否给予客户机画布模块208对现有元素的锁定(606)。如果服务器***106已经给予客户机画布模块208对现有元素的锁定(606处是“是”),客户机画布模块208更新客户机模型210以指示客户机画布模块208具有对现有元素的锁定(608)。在客户机画布模块208在步骤608处更新客户机模型之后或在客户机画布模块208确定服务器***106没有给予客户机画布模块208对现有元素的锁定(606处是“否”)之后,操作500在图7中标记为“C”的圆继续。
如果输入不是元素选择输入(600处是“否”),客户机画布模块208确定该输入是否是元素解除选择输入(610)。元素解除选择输入是解除选择的绘画中给定元素的输入。在各个实施例中,用户104A可以以各种方式提供元素解除选择输入。例如,用户104A可以通过选择画布的不含有元素的部分或通过选择绘画中的另一元素来提供元素解除选择输入。如果输入是元素解除选择输入(610处是“是”),客户机画布模块208更新客户机模型210以指示由元素解除选择输入所指定的给定元素不再被选择(612)。另外,客户机画布模块208将包括有解锁请求的客户机消息发送给服务器***106(614)。解锁请求向服务器***106指示客户机画布模块208不再需要对给定元素的锁定。在客户机画布模块208在步骤614中发送客户机消息之后,操作在图7中标记为“C”的圆继续。
如果输入不是元素解除选择输入(610处是“否”),客户机画布模块208确定该输入是否是元素添加输入(616)。元素添加输入是将新元素加入到绘画中的输入。如果输入是元素添加输入(616处是“是”),客户机画布模块208更新客户机模型210以包括由元素添加输入所指定的新元素(618)。随后,客户机画布模块208将包括添加元素请求的客户机消息发送给服务器***106(620)。添加元素请求指明了新元素。在客户机画布模块208在步骤620中发送客户机消息之后,操作500在图7中标记为“C”的圆继续。
如果输入不是元素添加输入(616处是“否”),客户机画布模块208确定该输入是否是元素修改输入(622)。元素修改输入是对绘画中已经存在的给定元素的一个或多个属性进行修改的输入。如果输入是元素修改输入(622处是“是”),客户机画布模块208更新客户机模型210以修改给定元素的一个或多个属性(624)。随后,客户机画布模块208将包括修改元素请求的客户机消息发送给服务器***106(626)。修改元素请求指示对给定元素的属性的改变。在客户机画布模块208在步骤626中发送客户机消息之后,操作500在图7中标记为“C”的圆继续。
如果输入不是元素修改输入(622处是“否”),客户机画布模块208确定该输入是否是元素删除输入(628)。元素删除输入是删除绘画中一个或多个元素的输入。如果输入是元素删除输入(628处是“是”),客户机画布模块208更新客户机模型210以删除所述一个或多个元素(630)。随后,客户机画布模块208将包括删除元素请求的客户机消息发送给服务器***106(632)。删除元素请求指示已经从绘画中删除了所述一个或多个元素。在客户机画布模块208在步骤632中发送客户机消息之后,操作500在图7中标记为“C”的圆继续。
图7是说明操作500的第三部分的流程图。如在图7中所示,操作500在标记为“C”的圆继续。最初,客户机画布模块208确定客户机设备102A是否已经接收到服务器消息(700)。服务器消息是由服务器***106发送给客户机设备102A的消息。如果客户机画布模块208确定客户机设备102A已经接收到服务器消息(在700处是“是”),客户机画布模块208确定服务器消息是否包括锁定消息(702)。锁定消息指示服务器***106已经锁定了服务器模型414中的给定元素。如果服务器消息包括锁定消息(在702处是“是”),客户机画布模块208更新客户机模型210以指示锁定了给定元素(704)。
如果服务器消息没有包括锁定消息(在702处是“否”),客户机画布模块208确定该服务器消息是否包括解锁消息(706)。解锁消息指示服务器***已经解锁了给定元素。如果服务器消息包括解锁消息(在706处是“是”),客户机画布模块208更新客户机模型210以指示给定元素被解锁(708)。
如果服务器消息没有包括解锁消息(在706处是“否”),客户机画布模块208确定该服务器消息是否包括元素添加消息(710)。元素添加消息指示服务器***106已经向绘画添加了新元素。如果服务器消息包括元素添加消息(在710处是“是”),客户机画布模块208更新客户机模型210以包括所述新元素(712)。
如果服务器消息没有包括元素添加消息(在710处是“否”),客户机画布模块208确定该服务器消息是否包括元素修改消息(714)。元素修改消息指示已经修改了绘画中的元素的一个或多个属性。例如,元素修改消息可以指示已经修改了绘画中现有的元素的线颜色、位置、大小、线宽度、填充颜色、字体或其他属性。如果服务器消息包括元素修改消息(在714处是“是”),客户机画布模块208就更新客户机模型210以如在元素修改消息中指定的那样修改现有元素的属性(716)。
如果服务器消息没有包括元素修改消息(在714处是“否”),则客户机画布模块208确定该服务器消息是否包括元素删除消息(718)。元素删除消息指示了已经从绘画中删除了元素。如果服务器消息包括元素删除消息(在718处是“是”),客户机画布模块208就更新客户机模型210以删除元素删除消息所指定的元素(720)。
如果客户机画布模块208确定没有接收到服务器消息(在700处是“否”)或在执行了步骤704、708、712、716或720中的一个步骤之后,客户机绘画模块208呈现来自客户机模型210的绘画(722)。通过这种方式,显示给用户104A的绘画反映了客户机模型210。
在呈现了来自客户机模型210的绘画之后,客户机画布模块208确定是否已经发生了网页关闭事件(724)。网页关闭事件在当用户104A导航离开浏览器202中的该网页时、在用户104A关闭了包含该网页的浏览器窗口时、或在用户104A使得该网页不再在浏览器窗口中打开时发生。响应于确定已经发生了网页关闭事件(在724处是“是”),客户机画布模块208向服务器***106发送包含网页关闭指示符的客户机消息(726)。网页关闭指示符向服务器***106指示了网页不再在客户机设备102A上打开。在步骤726中将客户机消息发送给服务器***106之后或在确定没有发生网页关闭事件(在724处是“否”)之后,操作500重启。
图8是说明由服务器***106执行的示例操作800的第一部分的流程图。如在图8的示例中所示,当web服务器400确定服务器***106已经从客户机设备102之一中接收了消息(802)时开始操作800。出于简单解释说明的目的,图8和9的讨论假设了服务器***106从客户机设备102接收了消息。如果服务器***106没有从客户机设备102中的任意一个处接收到消息(在802处是“否”),则服务器画布模块402等待从客户机设备102中的一个处接收到消息(804)。
另一方面,如果服务器***106已经从客户机设备102A处接收到消息(在802处是“是”),服务器***106确定该消息是否包括网页请求(806)。网页请求包括打开网页的请求。如果消息包括网页请求(在806处是“是”),web服务器400确定该网页是否包括画布(808)。如果该网页包括画布(在808处是“是”),则服务器画布模块402将客户机设备102A加入到订阅列表410中(810)。在服务器画布模块402将客户机设备102A加入到订阅列表410中之后或在确定该网页不包括画布(在808处是“否”)之后,web服务器400将网页响应发送给客户机设备102A(812)。网页响应包括表示该网页的数据。在将网页响应发送给客户机设备102A之后,操作800重启。
如果该消息不包括网页请求(在806处是“否”),服务器画布模块402确定该消息是否是包括有画布创建请求的客户机消息(814)。画布创建请求指令服务器画布***402在网页中创建新的画布。如果该客户机消息包括画布创建请求(在814处是“是”),服务器画布模块402在数据库404中创建新模型(816)。所述新模型包括表示在新的画布中的绘画的数据。服务器画布模块402随后将客户机设备102A加入到订阅列表410中(818)。接着,服务器画布模块402将表示新画布的数据发送给客户机设备102A(819)。在各种实施例中,表示新画布的数据以各种方式被格式化。例如,在一些实施例中,表示新画布的数据被格式化为一组XML元素并使用AJAX技术被发送给客户机设备102A。在将表示新画布的数据发送给客户机设备102A之后,操作800重启。
如果该客户机消息不包括画布创建请求(在814处是“否”),服务器画布模块402确定该客户机消息是否是包括有许可请求(820)。许可请求指令服务器画布模块402设定或更新对画布的许可。对画布的许可支配了哪些用户被授权查看和/或编辑画布。如果客户机消息包括许可消息(在820处是“是”),服务器画布模块402确定用户104A是否被授权设定画布的许可(822)。如果授权用户104A设定画布的许可(在822处是“是”),服务器画布模块402如在许可消息中指示的那样更新画布的许可(824)。在更新了画布的许可之后或在确定定用户没有被授权设定画布的许可(在822处是“否”)之后,操作800重启。
如果客户机消息没有包括许可消息(在820处是“否”),服务器画布模块402确定该客户机消息是否包括邀请消息(826)。邀请消息指令服务器画布模块402将邀请发送给指定的用户。该邀请邀请了指定的用户查看和/或编辑绘画。如果客户机消息包括邀请消息(在826处是“是”),服务器画布模块402将邀请发送给指定用户(828)。在发送所述邀请之后,操作800重启。
如果客户机消息没有包括邀请消息(在826处是“否”),服务器画布模块402确定该客户机消息是否包括网页关闭指示符(830)。如果该客户机消息包括网页关闭指示符(在830处是“是”),服务器画布模型402将客户机设备102A从订阅列表410中移除(832)。通过这种方式,当包含画布的网页没有打开时,客户机设备102A不接收有关画布的服务器消息。在从订阅列表410移除客户机设备102A之后,操作800重启。另一方面,如果客户机消息不包括网页关闭指示符(在830是“否”),服务器画布模块402执行图9中的操作800的该部分。
图9是说明操作800的第二部分的流程图。如果该客户机消息不包括网页关闭指示符(在830处是“否”),服务器画布模块402确定该客户机消息是否是包括锁定请求(900)。锁定请求指令了服务器画布模块402锁定服务器模型414中的元素。如果该客户机消息包括锁定请求(在900处是“是”),服务器画布模块402确定服务器模型414是否指示了已经对锁定请求所指定的元素进行锁定(902)如果对指定的元素已经存在锁定,另一用户已经选择了该元素并且还没有解除选择该元素。因此,如果对指定的元素存在锁定(在902处是“是”),服务器画布模块402将锁定拒绝响应发送给客户机设备102A(904)。该锁定拒绝响应指示服务器***不能将锁定提供给客户机设备102A。另一方面,如果对指定的元素已经有锁定(在902处是“否”),服务器画布模块402更新服务器模型414以指示客户机设备102A具有对指定元素的锁定(906)。服务器画布模块402随后将服务器消息发送给订阅列表410中列出的其他客户机设备(908)。服务器消息包括锁定消息。锁定消息指示了服务器***106已经锁定了指定的元素。服务器画布模块402随后将锁定授予响应发送给客户机设备102A(909)。该锁定授予响应指示服务器***106将对指定元素的锁定提供给客户机设备102A。
如果客户机消息不包括锁定请求(在900处是“否”),服务器画布模块402确定该客户机消息是否包括解锁请求(910)。解锁请求指示了客户机设备102A不再需要对指定元素的锁定。如果客户机消息包括解锁请求(在910处是“是”),服务器画布模块402确定客户机设备102A是否具有对指定元素的锁定。如果客户机设备102A具有对指定元素的锁定(在912处是“是”),服务器画布模块402更新该服务器模型414以移除对指定元素的锁定(914)。服务器画布模块402随后将服务器消息发送给订阅列表410中列出的其他客户机设备(915)。每个服务器消息包括解锁消息。解锁消息指示了服务器***106已经解锁了指定的元素。在更新了服务器模型414之后或在确定客户机设备102A不具有对指定元素的锁定(在912处是“否”)之后,操作800重启。
如果客户机消息没有包括解锁消息(在910处是“否”),服务器画布模块402确定该客户机消息是否包括添加元素请求(916)。添加元素请求指定了要添加给服务器画布模块402的元素。如果客户机消息包括添加元素请求(在916处是“是”),客户机画布模块402更新服务器模型414以将指定的元素加入到服务器模型414(918)。服务器画布模块402随后将服务器消息发送给订阅列表410中列出的其他客户机设备(920)。每个服务器消息包括元素添加消息。元素添加消息指示指定的元素已经被加入到绘画。操作800随后重启。
如果该客户机消息不包括添加元素请求(在916处是“否”),服务器画布模块402确定该客户机消息是否包括修改元素请求(922)。修改元素请求指示对绘画中元素的一个或多个属性的改变.如果客户机消息包括修改元素请求(在922处是“是”),服务器画布模块402确定客户机设备102A是否具有对指定元素的锁定(924)。如果客户机设备102A具有对指定元素的锁定(在924处是“是”),服务器画布模块402更新该服务器模型414以如修改元素请求所指示的那样修改指定元素的属性(926)。服务器画布模块402随后将服务器消息发送给订阅列表410中列出的其他客户机设备(928)。每个服务器消息包括元素修改消息。元素修改消息指示已经修改了元素的一个或多个属性。在步骤928发送了服务器消息之后或在确定客户机设备102A不具有对指定元素的锁定(在924处是“否”)之后,操作800重启。
如果该客户机消息不包括修改元素请求(在922处是“否”),服务器画布模块402确定该客户机消息是否包括删除元素请求(930)。删除元素请求指示已经从绘画中删除了所述一个或多个元素。如果客户机消息包括删除元素请求(在930处是“是”),服务器画布模块402确定客户机设备102A是否具有对指定元素的锁定(932)。如果客户机设备102A具有对指定元素的锁定(在932处是“是”),服务器画布模块402更新该服务器模型414以删除指定元素(934)。服务器画布模块402随后将服务器消息发送给订阅列表410中列出的其他客户机设备(936)。每个服务器消息包括元素删除消息。元素删除消息指示指定的元素已经被删除.在发送了服务器消息之后或在确定客户机设备102A不具有对指定元素的锁定(在932处是“否”)之后,操作800重启。
图10是示出示例的浏览器窗口1000的示例屏幕说明.浏览器窗口1000是由浏览器202显示的窗口。浏览器窗口1000包括导航控件1002。导航控件1002使用户104A能够控制导航。浏览器窗口1000还包括网页1004。在图10的示例中,网页1004是名为“John Smith”的用户的社交网络档案页。网页1004包含有关用户的个人信息,例如用户的图片、用户喜欢的音乐和用户的家乡。网页1004还包括来自其他用户的有关该用户的评论。
另外,网页1004包括状态更新区域1006。状态更新区域1006包括文本区域1008。用户可以将文本输入文本区域1008。将输入文本区域1008的文本张贴到网页1004上。另外,可以将输入文本区域1008的文本复制到在社交方面与该用户相连的人们的页面。
而且,状态更新区域1006包括图片控件1010。当用户选择图片控件1010时,用户可以选择一个图像文件以附加到输入文本区域1008的文本。而且,状态更新区域1006包括视频控件1012。当用户选择视频控件1012时,用户可以选择一个视频文件以附加到输入文本区域1008的文本。
状态更新区域1006还包括绘画控件1014。<当用户选择绘画控件1014时,画布出现在状态更新区域1006中。图11是示出当在状态更新区域1006中显示画布1016时的网页1004的示例屏幕说明。当画布1016处于状态更新区域1006中时,用户可以编辑画布1016中的绘画。用户随后选择提交控件1018来将画布1016加入到网页1004上。
图12是示出在已经将画布1016加入到网页914之后的网页1004的示例屏幕说明。用户“John Smith”可以编辑画布1016中的绘画。另外,打开该网页1004的其他用户可以编辑画布1016中的绘画。
图13是示出示例计算设备1300的框图。在一些实施例中,客户机设备102和/或服务器***106是使用一个或多个计算设备(例如计算设备1300)来实现的。应该理解,在其他实施例中,客户机设备102和/或服务器***106是使用具有硬件组件的计算设备来实现的,所述硬件组件与图13的示例中所说明的那些硬件组件并不相同。
在不同的实施例中,计算设备可以以不同的方式来实现。例如,在图13中的示例中,计算设备1300包括存储器1302、处理***1304、辅助存储设备1306、网络接口卡1308、视频接口1310、显示单元1312、外部组件接口1314以及通信媒介1316。在其他实施例中,计算设备是使用更多或更少的硬件组件来实现的。例如,在另一示范实施例中,计算设备不包括视频接口、显示单元、外部存储设备或输入设备。
此处所使用的术语计算机可读介质可包括计算机存储介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器1302包括一个或多个能够存储数据和/或指令的计算机存储介质。如在本文档中所使用,计算机存储介质是一种存储计算设备可读的数据和/或软件指令的设备或工厂制品。在不同的实施例中,存储器1302以不同的方式实现。例如,在各种实施例中,存储器1302是使用各种类型的计算机存储介质来实现的。示例类型的计算机存储介质包括,但不局限于,动态随机存取存储器(DRAM)、双重数据率同步动态随机存取存储器(DDR SDRAM)、减少等待时间的DRAM、DDR2 SDRAM、DDR3 SDRAM、Rambus RAM、固态存储器、闪存、只读存储器(ROM)、电可擦除可编程ROM和存储数据的其他类型的设备和/或工厂制品。
此处所使用的术语计算机可读介质还可包括通信媒介。通信媒介可由诸如载波或其他传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块、或其他数据来体现,并且包括任何信息传递介质。术语“已调制数据信号”可描述具有以对该信号中的信息编码的方式设定或者改变的一个或多个特征的信号。作为示例而非限制,通信媒介可包括诸如有线网络或直接线连接的有线介质,以及诸如声学、射频(RF)、红外线和其他无线介质的无线介质。
处理***1304包括选择性地执行软件指令的一个或多个物理集成电路。在各种实施例中,处理***1304以各种方式实现。例如,处理***1304可以以一个或多个处理核的形式来实现。在本示例中,处理***1304可以包括一个或多个Intel Core 2微处理器。在另一示例中,处理***1304可以包括一个或多个单独的微处理器。在还有一个示例实施例中,处理***1304可以包括提供专用功能的ASIC。在又另一个示例中,处理***1304可通过使用ASIC和通过执行软件指令来提供专用功能。在另一个示例中,处理***1304是ARM7处理器。在不同的实施例中,处理***1304以不同的指令集来执行软件指令。例如,处理单元1304执行指令集中的软件指令,所述指令集诸如x86指令集、POWER指令集、RISC指令集、SPARC指令集、IA-64指令集、MIPS指令集,和/或其他指令集。
辅助存储设备1306包括一个或多个计算机存储介质。辅助存储设备1306存储了所述处理***1304不能直接访问的数据和软件指令。换句话说,处理***1304执行I/O操作以从辅助存储设备1306处检索数据和/或软件指令。在各种实施例中,辅助存储设备1306由各种类型的计算机可读数据存储介质来实现。例如,辅助存储设备1306可以由一个或多个磁盘、磁带驱动器、CD-ROM盘、DVD-ROM盘、蓝光盘、固态存储设备、柏努利录音带(Bernoulli cartridges)和/或其他类型的计算机可读数据存储介质来实现。
网络接口卡1308使得计算设备1300将数据发送给通信网络,和从通信网络接收数据。在不同的实施例中,网络接口卡1308以不同的方式实现。例如,在各种实施例中,网络接口1308可以是以太网接口、令牌环网络接口、光纤网络接口、无线网络接口(例如,WiFi、WiMax等)、或另一类型的网络接口来实现的。
视频接口1310使计算设备1300将视频信息输出给显示单元1312。在不同的实施例中,视频接口1310以不同的方式实现。例如,在一个示范实施例中,视频接口1310被集成到计算设备1300的主板上。在另一个示范实施例中,视频接口1310是视频扩展卡。在各种实施例中,显示设备1312可以是阴极射线管显示器、LCD显示面板、等离子屏幕显示面板、触敏显示面板、LED屏幕、投影仪或另一类型的显示单元。在各种实施例中,视频接口以各种方式与显示单元1312通信。例如,视频接口1310可以通过通用串行总线(USB)连接器、VGA连接器、数字可视接口(DVI)连接器、S视频连接器、高清多媒体接口(HDMI)接口、显示端口连接器或另一类型的连接来与显示单元1312通信。
外部组件接口1314使计算设备1300能够与外部设备通信。在不同的实施例中,外部组件接口1314以不同的方式实现。例如,外部组件接口1314可以是USB接口、火线接口、串行端口接口、并行端口接口、PS/2接口和/或允许计算设备1300与外部设备通信的另一类型的接口。在不同的实施例中,外部组件接口1314使计算设备1300能够与不同的外部组件通信。例如,外部组件接口1314可以使得计算设备1300与外部存储设备、输入设备、扬声器、电话充电插座、调制解调器、媒体播放对接底座、其他计算设备、扫描仪、数码相机、指纹读取器和可以连接到计算设备1300的其他设备进行通信。示例类型的外部存储设备包括,但不局限于,磁带设备、闪存模块、磁盘驱动器、光盘驱动器、闪存单元、zip盘驱动器、自动换碟机以及包括一个或多个计算机存储介质的其他类型的设备。示例类型的输入设备包括,但不局限于,键盘、轨迹球、笔输入设备、按键式拨号盘、麦克风、操纵杆、触敏显示屏以及将用户输入提供给计算设备1300的其他类型的设备。
通信媒介1316方便了在计算设备1300的硬件组件之间的通信。在不同的实施例中,通信媒介1316方便了在计算设备1300的不同组件之间的通信。例如,在图13的示例中,通信媒介1316方便了在存储器1302、处理***1304、辅助存储设备1306、网络接口卡1308、视频接口1310以及外部组件接口1314之间的通信。在计算设备1300的不同的实现中,通信媒介1316可以以不同的方式来实现.例如,在计算设备1300的不同的实现中,通信媒介1316可作为PCI总线、PCI Express总线、加速图形端口(AGP)总线、Infiniband互连、串行高级技术附件(ATA)互连、并行ATA互连、光纤通道互连、USB总线、小型计算***接口(SCSI)接口,或其他类型的通信媒介来实现。
存储器1302存储了各种类型的数据和/或软件指令。例如,在图13的示例中,存储器1302存储了基本输入/输出***(BIOS)1324以及操作***1326。BIOS 1324包括当由处理***1304执行时使得计算设备1300启动的一组软件指令。计算***1326包括当由处理***1304执行时使得计算设备1300提供操作***的一组软件指令,所述操作***协调计算设备1300的活动和资源的共享。
上述各实施例仅作为说明提供,并且不应被解释为限制。本领域的技术人员将容易地识别出可能不遵循在此说明并描述的示例实施例和应用而做出的各种修改和变化。例如,在图中示出的操作仅仅是示例。在各种实施例中,类似的操作可以包括比在图中所示出的那些步骤更多或更少的步骤。而且,在其他实施例中,类似的操作可以包括与在图中所示出的那些操作步骤不相同的顺序的步骤。