CN113626010A - 一种协同编程方法、装置、系统、服务器及介质 - Google Patents
一种协同编程方法、装置、系统、服务器及介质 Download PDFInfo
- Publication number
- CN113626010A CN113626010A CN202110762446.8A CN202110762446A CN113626010A CN 113626010 A CN113626010 A CN 113626010A CN 202110762446 A CN202110762446 A CN 202110762446A CN 113626010 A CN113626010 A CN 113626010A
- Authority
- CN
- China
- Prior art keywords
- target
- information
- programming
- collaborative
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 163
- 238000006243 chemical reaction Methods 0.000 claims abstract description 149
- 238000012545 processing Methods 0.000 claims abstract description 108
- 238000013507 mapping Methods 0.000 claims abstract description 37
- 230000008859 change Effects 0.000 claims description 57
- 238000012790 confirmation Methods 0.000 claims description 52
- 230000001360 synchronised effect Effects 0.000 claims description 34
- 238000004891 communication Methods 0.000 claims description 24
- 230000006854 communication Effects 0.000 claims description 24
- 230000003139 buffering effect Effects 0.000 claims description 8
- 238000012163 sequencing technique Methods 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 3
- 230000037431 insertion Effects 0.000 claims description 3
- 230000009466 transformation Effects 0.000 description 15
- 230000008569 process Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012913 prioritisation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明公开了一种协同编程方法、装置、系统、服务器及介质,包括:获取对目标编程作品的第一编程操作;将第一编程操作转换为用于编辑目标文档的第一协同信息,目标文档用于映射目标编程作品的代码数据;当获取到分享指令时,向服务器发送第一协同信息,以指示服务器向第二客户端发送第一目标协同信息,第一目标协同信息是对第一协同信息进行操作转换处理得到的,以解决第一协同信息与历史协同信息的编辑冲突。通过文档来实时映射编程作品的代码数据,在协同编程时将编程操作转换为用于编辑文档的协同信息并分发给各客户端,实现编程操作的实时共享,并且通过操作转换处理来解决不同客户端对目标文档的编辑冲突,得到准确实时的协同编程结果。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种协同编程方法、装置、系统、服务器及介质。
背景技术
随着社会的发展和进步,以及计算机科学的飞速发展,编程成为了现代人一项越来越重要的基本能力,任何年龄、任何基础的人员都有越来越强的学习和体验程序编写的需求。面向儿童侧的编程产品——图形化积木式编程工具,随着时代的发展应运而生。
目前的积木式编程中,往往是不同用户在各自的终端上独立进行编程,若多个用户需要共同编辑一个作品,则需要在各自使用的终端上进行作品编辑后再导出发送给某一个用户进行融合,实时性非常差,并且即使不同终端之间通过协同通信来共同编辑作品,也很可能出现不同终端之间的编程冲突,因此目前还难以实现实时准确的协同编程。
发明内容
本发明的目的在于提供一种协同编程方法、装置、系统、服务器及介质,旨在解决现有技术中协同编程实时性与准确性不够的问题。
本发明第一方面提供一种协同编程方法,所述方法应用于第一客户端,所述方法包括:获取对目标编程作品的第一编程操作;将所述第一编程操作转换为用于编辑目标文档的第一协同信息,所述目标文档用于映射所述目标编程作品的代码数据;当获取到分享指令时,向服务器发送所述第一协同信息,所述分享指令用于指示所述服务器向与所述第一客户端协同通信的第二客户端发送第一目标协同信息,其中,所述第一目标协同信息为所述第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突。
在一些实施例中,所述获取对目标编程作品的第一编程操作之前,所述方法还包括:根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
在一些实施例中,所述将所述第一编程操作转换为用于编辑目标文档的第一协同信息,包括:基于所述第一编程操作对所述目标编程作品的更改,调用预设转换方法将所述第一编程操作转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;根据所述第一文档操作生成所述第一协同信息,所述第一协同信息用于将所述第一编程操作映射为对所述目标文档中代码数据的更改,或者,基于预设操作节点内的操作组合对所述目标编程作品的更改,调用预设转换方法将所述操作组合包含的所述第一编程操作依次转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;根据所述第一文档操作生成单位协同信息,并按转换顺序对所述单位协同信息进行组合后得到所述第一协同信息,所述第一协同信息用于将所述操作组合映射为对所述目标文档中代码数据的更改。
在一些实施例中,当所述目标文档为树形结构的JSON文档时,所述第一文档操作包括拾取子树操作、插入子树操作和编辑子树的对象操作。
在一些实施例中,所述当获取到分享指令时,向服务器发送所述第一协同信息,包括:当获取到分享指令时确认所述第一客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态,所述分享指令中携带所述第二客户端的标识;若所述第一客户端的协同状态为已同步状态,则向服务器发送所述第一协同信息,通过所述分享指令指示所述服务器向所述标识确定的所述第二客户端发送所述第一目标协同信息。
在一些实施例中,所述方法还包括:在向所述服务器发送所述第一协同信息后更新所述第一客户端的协同状态,并且,在接收到所述服务器返回的指令确认信息时更新所述第一客户端的协同状态。
在一些实施例中,所述方法还包括:获取协同创建指令,所述协同创建指令用于指示所述第一客户端建立与第二客户端之间的协同通信;根据所述协同创建指令创建目标编程作品,并向所述服务器发送所述目标编程作品。
在一些实施例中,所述方法还包括:接收所述服务器发送的第二目标协同信息,所述第二目标协同信息为所述第二客户端发送的第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突;根据所述第二目标协同信息对所述目标文档进行编辑;展示所述第二目标协同信息对所述目标文档进行编辑后映射得到的所述目标编程作品的协同编程结果。
在一些实施例中,所述方法还包括:将所述第二目标协同信息还原为用于更改所述目标编程作品的第二目标编程操作;当所述第二目标编程操作与本地获取到的所述第一编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二目标编程操作和所述第一编程操作进行冲突处理。
本申请实施例第二方面提供一种协同编程方法,所述方法应用于第二客户端,所述第二客户端与第一客户端协同通信,所述方法包括:接收服务器发送的第一目标协同信息,所述第一目标协同信息为所述第一客户端发送的第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突;根据所述第一目标协同信息对所述目标文档进行编辑,所述目标文档用于映射目标编程作品的代码数据;将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作;展示所述第一目标编程操作对所述目标编程作品进行更改后的协同编程结果。
在一些实施例中,所述接收服务器发送的第一目标协同信息之前,所述方法还包括:根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
在一些实施例中,所述根据所述第一目标协同信息对所述目标文档进行编辑,包括:确认所述第二客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态;若所述第二客户端的协同状态为已同步状态,则根据所述第一目标协同信息对所述目标文档进行编辑;若所述第二客户端的协同状态为等待确认状态或带缓冲等待状态,则对所述第一目标协同信息进行二次操作转换处理,根据经二次操作转换处理后的第一目标协同信息对所述目标文档进行编辑。
在一些实施例中,所述将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作,包括:根据预设的解析类库对所述第一目标协同信息进行解析,获取所述第一目标协同信息中包含的用于更改所述代码数据的第一目标文档操作;基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改,或者,对所述第一目标协同信息进行分解后得到若干个单位协同信息;根据预设的解析类库对所述单位协同信息依次进行解析,获取各个单位协同信息中包含的对所述代码数据的第一目标文档操作;基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改。
在一些实施例中,所述当所述目标文档为树形结构的JSON文档时,所述第一目标文档操作包括拾取子树操作、插入子树操作、编辑子树的对象操作。
在一些实施例中,所述方法还包括:当所述第一目标编程操作与本地获取到的第二编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二编程操作和所述第一目标编程操作进行冲突处理。
在一些实施例中,所述方法还包括:创建目标编程作品,并向所述服务器发送所述目标编程作品,
或者,接收所述服务器发送的所述目标编程作品。
在一些实施例中,所述方法还包括:获取对目标编程作品的第二编程操作;将所述第二编程操作转换为用于编辑所述目标文档的第二协同信息;当获取到分享指令时,向服务器发送所述第二协同信息,所述分享指令用于指示所述服务器向所述第一客户端发送第二目标协同信息,其中,所述第二目标协同信息为所述第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突。
本申请实施例第三方面提供一种协同编程方法,所述方法应用于服务器,所述方法包括:接收第一客户端发送的第一协同信息和分享指令,所述第一协同信息用于对映射目标编程作品的目标文档进行编辑,所述分享指令中携带第二客户端的标识;根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,以解决所述第一协同信息与历史协同信息之间的编辑冲突;根据所述分享指令的指示,向所述标识确定的所述第二客户端发送所述第一目标协同信息。
在一些实施例中,所述接收第一客户端发送的第一协同信息和分享指令之前,所述方法还包括:根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并分发给所述第一客户端和第二客户端。
在一些实施例中,所述根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,包括:获取所述历史协同信息与所述第一协同信息的指令接收时间,并对指令接收时间进行排序,所述历史协同信息来源于第一客户端或第二客户端;在所述第一协同信息与所述历史协同信息之间存在冲突时,根据指令接收时间的排序按预设转换规则对所述第一协同信息进行操作转换处理,以解决所述第一协同信息与历史协同信息之间的编辑冲突。
在一些实施例中,所述根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理得到第一目标协同信息之后,所述方法还包括:向所述第一客户端发送指令确认信息。
本申请实施例提供一种协同编程装置,该装置具有实现上述第一方面及其各实现方式中的方法的功能。
本申请实施例提供一种协同编程装置,该装置具有实现上述第二方面及其各实现方式中的方法的功能。
本申请实施例提供一种协同编程装置,该装置具有实现上述第三方面及其各实现方式中的方法的功能。
一种服务器,包括:
接收模块,用于接收第一客户端发送的第一协同信息和分享指令,所述第一协同信息用于对映射目标编程作品的目标文档进行编辑,所述分享指令中携带第二客户端的标识;
操作转换模块,用于根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,以解决所述第一协同信息与历史协同信息之间的编辑冲突;
发送模块,用于根据所述分享指令的指示,向所述标识确定的所述第二客户端发送所述第一目标协同信息。
一种协同编程系统,所述系统包括至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述协同编程方法。
本发明的另一实施例还提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器执行上述的协同编程方法。
有益效果:本发明公开了一种协同编程方法、装置、系统、服务器及介质,相比于现有技术,通过目标文档来实时映射目标编程作品的代码数据,在协同编程时将对目标编程作品的编程操作转换为用于编辑目标文档的协同信息并分发给各客户端,以实现编程操作的实时共享,提高了协同编程的实时性,并且还通过操作转换处理来解决不同客户端对目标文档的编辑冲突,提高协同编程的准确性,进而得到实时准确的协同编程结果。
附图说明
图1为本发明实施例提供的协同编程方法的一个流程图;
图2为本发明实施例提供的协同编程方法的另一个流程图;
图3为本发明实施例提供的协同编程方法的另一个流程图;
图4为本发明实施例提供的协同编程方法的另一个流程图;
图5为本发明实施例提供的协同编程方法的另一个流程图;
图6为本发明实施例提供的协同编程方法的另一个流程图;
图7为本发明实施例提供的协同编程方法中操作转换模型的一个结构示意图;
图8为本发明实施例提供的协同编程方法中不同终端之间的一个交互示意图;
图9为本发明实施例提供的协同编程装置的一个功能模块示意图;
图10为本发明实施例提供的协同编程装置的另一个功能模块示意图;
图11为本发明实施例提供的服务器的一个功能模块示意图;
图12为本发明实施例提供的协同编程系统的硬件结构示意图。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。以下结合附图对本发明实施例进行介绍。
本发明实施例提供协同编程方法应用于包括若干个终端设备、网络和服务器构成的系统,以实现多个终端设备之间的协同编程,其中网络为在终端设备和服务器之间提供通信链路的介质,其可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。所述终端设备可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、便携式计算机和台式服务器等等。
不同身份的用户例如教师用户、学生用户等等可通过其各自的账号,分别在各自的终端设备上登陆并使用积木编程的IDE(integrated development environment,集成开发环境)进行协同编程操作,即IDE为预先安装在各个终端上的积木编程客户端,其集成了例如代码编辑器、编译器、解释器、调试器等,以实现积木代码编译、调试以及执行等过程。
具体若干个终端设备可以是至少两个终端设备,且各个终端设备上的客户端之间通过服务器进行协同通信,例如第一客户端和各个第二客户端通过服务器按WebSocket协议进行协同通信,以实现第一客户端和各个第二客户端之间的协同编程。不同用户可登录使用各自终端设备上的客户端,对同一个目标编程作品进行协同编程,在协同编程过程中,每个加入到协同通信中的客户端上的编程操作均将被同步到其它客户端上,在其它客户端上同步显示对目标编程作品的编程结果,从而达到协同编程的目的。
具体请参阅图1,图1为本发明提供的协同编程方法一个实施例的流程图,该方法应用于第一客户端,以主动输入编程操作的用户所登录使用的第一客户端的角度对协同编程方法进行介绍。
如图1所示,该方法具体包括如下步骤:
S101、获取对目标编程作品的第一编程操作。
本实施例中,当用户通过第一账号登录第一客户端后,可以由用户在所述第一客户端上的图形编程界面输入对目标编程作品的第一编程操作,通过检测触摸事件或者鼠标事件或键盘输入事件等方式获取到所述第一编程操作,其中,所述目标编程作品可以是在所述第一客户端上新创建的,此时第一客户端将新创建的目标编程作品通过服务器发送给各个第二客户端,实现目标编程作品的灵活新增;或者也可以是保存在所述服务器的共享空间上的,所有保持协同通信的客户端均可访问所述共享空间内的数据,第一客户端以及各第二客户端均可从所述共享空间内下载所述目标编程作品至本地后,再由用户进行协同编程操作,实现目标编程作品的集中高效分发。
具体所述第一编程操作以所述目标编程作品中的图形元素为操作对象,例如积木代码块、执行角色等等,具体可以是移动操作、删除操作、拖拽操作、添加操作、拼接操作等等,本实施例对此不作限定,从而实现对积木代码块或者执行角色的图形化编程操作。其中所述积木代码块为图形化编程中用来代替代码片段的块状结构,每个积木代码块中均封装有触发相应事件或者实现相应功能的代码,所述执行角色是运行所述积木代码块时该运行事件的对象,即对所述执行角色执行积木代码块所对应的事件、展示相应的执行结果,通过对积木代码块和执行角色进行可视化的编程操作,即可实现便捷高效的编程过程。
进一步地,如图2所示,所述步骤S101之前,所述方法还包括步骤:
S104、根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
本实施例中,在所述第一客户端上新创建或下载了所述目标编程作品后,根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地,也就是说,本实施例中将目标编程作品转换为目标文档的转换操作在第一客户端上执行,当然在其他实施例中,还可从例如服务器上下载已转换的目标文档,本实施例对此不作限定。由于积木编程操作时,用户操作的并非文档而是封装有相应逻辑代码的积木代码块,积木代码块之间存在例如依赖、包含、连接等等交互关系,基于积木代码块的复杂性,传统的图形协同编辑无法确保对积木代码块的编程操作进行准确的协同处理,因此本实施例中先根据所述目标编程作品的积木搭建结构将其转换为预设格式的所述目标文档,从而将图形化的目标编程作品转换为准确的包含有相应代码数据的目标文档,后续针对目标编程作品的编程操作,则对应转换为对目标文档的编辑操作,以便基于文档编辑来解决不同客户端上编程冲突,提高积木编程协同的准确性。
具体可将所述目标编程作品转换为JSON(javascript object notation,JS对象简谱)格式的目标文档,例如获取所述目标编程作品中积木代码块的搭建结构,确定各个子积木之间的交互关系,例如连接、包含、顺序依赖等等,并且获取各个子积木的积木数据,所述积木数据为各个子积木中封装的相应功能的代码数据,例如可以是JavaScript代码或其他代码等等,根据各个子积木之间的交互关系与积木数据将目标编程作品转换为预设结构的JSON文档,具体可采用树形结构的JSON文档以更加清晰的体现积木代码块之间的层级关系。JSON是一种轻量级的数据交换格式,其采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得JSON成为理想的数据交换语言,更加易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。可以理解的是,JSON格式的目标文档可以通过预设结构来保存所述目标编程作品的代码数据,例如采用树形结构的JSON文档以适配预设的解析类库中的解析与操作转换规则,实现对文档编辑冲突的解决。
S102、将所述第一编程操作转换为用于编辑目标文档的第一协同信息,所述目标文档用于映射所述目标编程作品的代码数据。
本实施例中,当第一客户端获取了对目标编程作品的第一编程操作后,则将所述第一编程操作对应转换生成用于编辑所述目标文档的第一协同信息,所述目标文档用于映射所述目标编程作品的代码数据,即所述第一协同信息是应用于文档数据的操作指令,由于所述目标文档中存储有雨所述目标编程作品的搭建结构实时映射的代码数据,因此所述目标编程作品的改变会导致所述目标文档进行相应的改变,同样的,所述目标文档的改变也会导致所述目标编程作品的改变,二者始终保持实时映射的关系,在进行协同编程时,将所述第一编程操作转换为所述第一协同信息以通过代码数据的更改来反映目标编程作品的更改,使得图形化的编程操作可转换为准确的文档编辑操作,可避免因操作的积木代码块之间的交互关系造成的协同编程传统。
具体地,所述将所述第一编程操作转换为用于编辑目标文档的第一协同信息,包括:
基于所述第一编程操作对所述目标编程作品的更改,调用预设转换方法将所述第一编程操作转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;
根据所述第一文档操作生成所述第一协同信息,所述第一协同信息用于将所述第一编程操作映射为对所述目标文档中代码数据的更改,
或者,
基于预设操作节点内的操作组合对所述目标编程作品的更改,调用预设转换方法将所述操作组合包含的所述第一编程操作依次转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;
根据所述第一文档操作生成单位协同信息,并按转换顺序对所述单位协同信息进行组合后得到所述第一协同信息,所述第一协同信息用于将所述操作组合映射为对所述目标文档中代码数据的更改。
本实施例中,所述第一客户端在根据所述第一编程操作生成相应的第一协同信息时,基于单次的所述第一编程操作对所述目标编程作品的更改,例如删除了积木代码块或者移动了积木代码块等等,此时可以直接调用预设转换方法进行编程操作与协同信息之间的转换,将单次获得的第一编程操作转换为对应的第一文档操作,所述第一文档操作是预设的用于更改所述目标文档中的代码数据的基础操作,一个编程操作可对应转换为更加基础的一个或者多个基础操作,所述基础操作可包括不同的操作类型,从而降低协同编程操作的原子性,有利于后续的冲突解决,也就是说用户对目标编程作品输入的第一编程操作,可以转换为包括了一个或多个第一文档操作的第一协同信息,以对目标文档进行相应的更改,当存在多个第一文档操作时,则将其组合后生成所述第一协同信息,通过所述第一协同信息将所述第一编程操作映射为对所述目标文档中代码数据的更改。
或者,在进行协同编程时若存在操作组合的输入场景,则基于预设操作节点内的操作组合对所述目标编程作品的更改进行转换,具体所述操作组合指的是至少两个具有顺序依赖的第一编程操作构成的编程操作,所述预设操作节点可以根据用户输入的组合指令确定,例如用户在输入操作组合前点击第一客户端上预设的“组合”按钮,则在检测到用户再次点击该“组合”按钮前的所有编程操作,均作为一个操作组合来进行协同信息的转换生成,或者还可采用例如预设时间来确定操作节点等方式,当用户点击“组合”按钮后开始计时,当计时到预设时间(例如30秒等等)时则结束计时,预设时间内获取到的所有第一编程操作即作为操作组合,即用户需在预设时间内完成操作组合的输入,当然,在其它实施例中还可采用其他方式,本实施例对此不作限定。
基于操作组合对所述目标编程作品的更改,此时可调用预设转换方法将所述操作组合包含的第一编程操作依次转换为对应的第一文档操作,类似的,所述第一文档操作是预设的用于更改所述目标文档中的代码数据的基础文档操作,根据所述第一文档操作生成若干个对应于所述第一编程操作的单位协同信息,再将得到的若干个单位协同信息按转换顺序进行组合后得到所述第一协同信息,此时通过所述第一协同信息将所述操作组合映射为对所述目标文档中代码数据的更改。由于积木编程操作中对积木的操作可能存在顺序依赖,若将存在顺序依赖的编程操作组合单独转换为相应的协同信息,可能导致后续在冲突处理时发生错误,因此为避免这种情况,本实施例中针对预设操作节点内的操作组合采用依次转换后再组合生成第一协同信息的方式,以防止存在顺序依赖的编程操作组合被其它无关操作插队,导致协同编程出错。
具体转换时,通过基础的所述第一文档操作对所述第一编程操作进行转换,即生成的所述第一协同信息中仅包含一个或多个第一文档操作,通过不同操作类型组合得到的第一文档操作来实现相应的第一编程操作,以目标文档为树形结构的JSON文档时为例,所述第一文档操作包括拾取子树操作、插入子树操作和编辑子树的对象操作,即在进行编程操作与协同信息之间的转换时,一个编程操作可对应转换为包含有至少一种上述操作类型的第一文档操作的组合,通过预设的基础的操作类型来组合映射编程操作对编程作品的更改,从而将编程操作转换为原子性更高的原子操作(意为“不可被中断的一个或一系列操作”),有利于在对目标文档进行编辑时能准确的处理编辑冲突,实现准确的协同编程。
S103、当获取到分享指令时,向服务器发送所述第一协同信息,所述分享指令用于指示所述服务器向与所述第一客户端协同通信的第二客户端发送第一目标协同信息,
其中,所述第一目标协同信息为所述第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突。
本实施例中,在将第一编程操作对应转换为第一协同信息后,用户可通过点击图形编程界面上预设的例如“分享”按钮输入分享指令,当获取到该分享指令后,则向服务器发送已转换得到的所述第一协同信息,例如当用户正在进行协同编程时,在目标编程作品上输入第一编程操作后可简单点击“分享”按钮进行操作共享,此时则将所述第一编程操作转换得到的第一协同信息发送给服务器,同时通过所述分享指令指示所述服务器向指定的第二客户端发送第一目标协同信息即可实现编程操作的协同共享,在多人共同编辑作品时简化了操作步骤、节约了大量的时间。
其中,所述第一目标协同信息为所述第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突,由于当前向服务器发送的第一协同信息与服务器接收到的历史协同信息之间可能存在指令冲突,导致不同客户端上的编程结果不一样,因此需要向第二客户端发送经操作转换处理后得到的第一目标协同信息,以解决不同客户端对同一个目标编程作品进行编辑时的编辑冲突,进而在第二客户端上展示第一目标协同信息所对应的编程结果,由于所述第一目标协同信息已解决了编辑冲突,因此在第二客户端上展示的编程结果与第一客户端上第一编程操作的执行结果相同,实现实时准确的协同编程。
可选的,所述当获取到分享指令时,向服务器发送所述第一协同信息,包括:
当获取到分享指令时确认所述第一客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态,所述分享指令中携带所述第二客户端的标识;
若所述第一客户端的协同状态为已同步状态,则向服务器发送所述第一协同信息,通过所述分享指令指示所述服务器向所述标识确定的所述第二客户端发送所述第一目标协同信息。
本实施例中,在获取到了携带有所述第二客户端的标识分享指令时,不立即向服务器发送所述第一协同信息,而是先确认当前所述第一客户端的协同状态,具体所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态,其中同步状态表示客户端本地没有滞留待发的协同信息,已发出的协同信息均已收到确认信息;等待确认状态表示客户端本地没有滞留待发的协同信息,且等待已发出的协同信息的确认信息;带缓冲等待状态表示客户端本地有滞留待发的协同信息,且等待已发出的协同信息的确认信息,通过不同的协同状态明确区分客户端当前的指令发送状态,以便实现更加有序准确的协同编程,确保协同编程的顺利进行。
在确认了第一客户端当前的协同状态后,若当前为已同步状态,说明之前发出的协同信息均已收到确认信息进行了同步,且没有其他滞留待发的协同信息,说明此时的第一协同信息为最新待发送的协同信息,因此向与所述第一客户端通信连接的服务器发送所述第一协同信息和分享指令,通过所述分享指令指示所述服务器向所述标识确定的所述第二客户端发送所述第一目标协同信息,具体所述标识可以是第二客户端的地址信息,例如IP地址,或者也可以是当前使用第二客户端的用户的ID信息等等,从而通过服务器向指定的第二客户端发送经操作转换处理后得到的第一目标协同信息,确保协同编程中协同信息的准确分发共享。
所述协同编程方法还包括:
在向所述服务器发送所述第一协同信息后更新所述第一客户端的协同状态,并且,在接收到所述服务器返回的指令确认信息时更新所述第一客户端的协同状态。
本实施例中,所述第一客户端的协同状态是根据其协同信息的发送情况以及确认情况进行实时更新的,当所述第一客户端在向所述服务器发送了第一协同信息后,说明发送前的状态为已同步状态,则发送后更新为等待确认状态,表明协同信息已发送暂未收到确认信息;并且所述第一客户端还在接收到所述服务器返回的指令确认信息时更新相应的协同状态,具体来说,若所述第一客户端在接收到指令确认信息前为已同步状态,由于当前不应该有等待的指令确认信息,因此在接收到所述指令确认信息时抛出错误;若所述第一客户端在接收到指令确认信息前为等待确认状态,此时本地已没有其他待发的协同信息,因此在接收到所述指令确认信息时更新为已同步状态;若所述第一客户端在接收到指令确认信息前为带缓冲等待状态,此时还有其他待发的协同信息,因此向服务器发送缓存中的协同信息,若本地没有其他待发的协同信息则将状态更新为等待确认状态,若本地还有其他待发的协同信息则保持带缓冲等待状态。根据协同信息的发送与确认对应更新第一客户端的协同状态,保证每次的协同信息均能按序发送至服务器进行共享,实现准确有序的协同信息发送共享。
所述协同编程方法还包括:
获取协同创建指令,所述协同创建指令用于指示所述第一客户端建立与第二客户端之间的协同通信;
根据所述协同创建指令创建目标编程作品,并向所述服务器发送所述目标编程作品。
本实施例中,用户可根据编程需要选择是否进行协同编程,当需要进行协同编程时,可输入协同创建指令,以指示所述第一客户端建立与指定的第二客户端之间的协同通信,例如用户可点击“创建协同项目”指令,并根据进一步的协同对象引导信息选择邀请加入协同编程的其它用户,根据其它用户的ID信息确定相应的第二客户端,通过服务器与确定的第二客户端之间建立协同通信,具体可建立socket连接以实现协同通信,之后还根据进一步的项目创建引导信息在第一客户端上创建目标编程作品,并将所述目标编程作品发送给服务器,使得所述服务器向各第二客户端下发所述目标编程作品,实现目标编程作品的灵活创建与共享。
所述协同编程方法还包括:
接收所述服务器发送的第二目标协同信息,所述第二目标协同信息为所述第二客户端发送的第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突;
根据所述第二目标协同信息对所述目标文档进行编辑;
展示所述第二目标协同信息对所述目标文档进行编辑后映射得到的所述目标编程作品的协同编程结果。
本实施例中,可以由用户在所述第二客户端上的图形编程界面输入第二编程操作,通过所述第二编程操作对所述目标编程作品进行积木编程,与第一协同信息类似的,将所述第二编程操作转换对用于编辑目标文档的第二协同信息,所述第一客户端接收所述服务器发送的对第二协同信息进行操作转换处理后得到的第二目标协同信息,此时所述第二目标协同信息已解决了编辑冲突,确保第一客户端接收到的协同信息的准确性,类似的,所述第二协同信息的生成方法与所述第一协同信息的生成方法相同,所述第二目标协同信息的生成方法与所述第一目标协同信息的生成方法相同,此处不作赘述。
即第一客户端不仅可以作为发送端向各个第二客户端发送第一协同信息,同样也可以作为接收端接收各个第二客户端基于第二编程操作生成的、且经操作转换处理后得到的第二目标协同信息,之后在第一客户端本地根据所述第二目标协同信息对所述目标文档进行编辑,以映射经操作转换处理的第二编程操作对代码数据的更改,从而在所述第一客户端的本地界面展示所述第二目标协同信息对所述目标文档进行编辑后映射得到的无编辑冲突的协同编程结果,由此可实现多个客户端之间对相同的目标编程作品进行协同编程,增强了不同客户端的使用用户之间的信息互通性和编程效率。
可选的,在第一客户端作为接收端时,所述协同编程方法还包括:
将所述第二目标协同信息还原为用于更改所述目标编程作品的第二目标编程操作;
当所述第二目标编程操作与本地获取到的所述第一编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二目标编程操作和所述第一编程操作进行冲突处理。
本实施例中,在执行第二目标协同信息所映射的编程操作时,先对所述第二目标协同信息进行还原处理,得到用于更改所述目标编程作品的搭建结构的第二目标编程操作,可以理解的是,该还原过程与第一协同信息和第二协同信息的生成过程是相反的,从而将对目标文档中代码数据的更改实时映射为对目标编程作品的搭建结构的更改。同时,由于服务器发送的第二目标协同信息仅仅能根据已接收到的历史协同信息进行操作转换处理以解决冲突,若接收端本地存在尚未发送的协同信息,则还原得到的第二目标编程操作可能第一客户端本地获取到的第一编程操作之间存在冲突,例如尚未转换生成协同信息的第一编程操作等等,此时如果直接将还原得到的第二目标编程操作之间应用在第一客户端的目标编程作品上,会发生编程冲突甚至客户端崩溃的情况,因此为避免这种情况的发生,按预设的操作优先级排序对存在冲突的第二目标编程操作和第一编程操作进行冲突处理,具体的操作优先级排序可以按时间排序,例如获取服务器接收到所述第二协同信息的时间以及本地的第一编程操作的输入时间,时间越靠前则优先级越高等等,当然还可以采用其他的优先级排序规则,本实施例对此不作限定,具体冲突处理时则先执行操作优先级更高的编程操作,再执行操作优选级更低的编程操作,确保在客户端的操作层面不会出现操作冲突,提高协同编程的准确性。
以上主要从主动输入编程操作的用户所登录使用的第一客户端的角度对协同编程方法进行介绍,以下将从被动同步编程操作的用户所登陆使用的第二客户端的角度对协同编程方法进行介绍。
请参阅图3,图3为本发明提供的协同编程方法一个实施例的流程图,该方法应用于第二客户端,且所述第二客户端与第一客户端保持协同通信。
如图3所示,该方法具体包括如下步骤:
S301、接收服务器发送的第一目标协同信息,所述第一目标协同信息为所述第一客户端发送的第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突。
本实施例中,与第一客户端类似,用户可通过第二账号登陆所述第二客户端,在所述第二客户端上接收服务器发送的第一目标协同信息,其中所述第一目标协同信息为所述第一客户端发送的第一协同信息经过操作转换处理得到的,所述第一协同信息则是根据第一客户端上输入的对目标编程作品的第一编程操作转换得到的,也就是说,此时第二客户端作为协同通信中的接收端,接收服务器分发的对所述第一协同信息进行操作转换处理后得到的第一目标协同信息,此时所述第一目标协同信息已解决了编辑冲突,以实现在第二客户端上通过所述第一目标协同信息对目标文档进行无冲突的准确编辑,实现高效准确的协同信息传输。具体地,所述第一协同信息的转换生成方式在第一客户端执行的方法中已经详细介绍过,此处不作赘述。
所述协同编程方法还包括:
创建目标编程作品,并向所述服务器发送所述目标编程作品,
或者,
接收所述服务器发送的所述目标编程作品。
本实施例中,所述目标编程作品可以是在所述第二客户端上新创建的,此时第二客户端将新创建的目标编程作品发送给服务器,通过所述服务器发送给第一客户端后再接收所述第一目标协同信息,实现目标编程作品的灵活新增;或者所述目标编程作品也可以是保存在所述服务器的共享空间上的,所有保持协同通信的客户端均可访问所述共享空间内的数据,第二客户端可从所述共享空间内下载所述目标编程作品至本地后,再接收所述第一目标协同信息以进行协同编程操作,实现目标编程作品的集中高效分发。
进一步地,如图4所示,所述步骤S301之前,所述方法还包括步骤:
S305、根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
本实施例中,在所述第二客户端上新创建或下载了所述目标编程作品后,根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地,也就是说,本实施例中将目标编程作品转换为目标文档的转换操作在第二客户端上执行,当然在其他实施例中,还可从例如服务器上下载已转换的目标文档,本实施例对此不作限定。类似的,由于用户在第一客户端上输入的第一编程操作时,用户操作的并非文档而是封装有相应逻辑代码的积木代码块,积木代码块之间存在例如依赖、包含、连接等等交互关系,基于积木代码块的复杂性,传统的图形协同编辑无法确保对积木代码块的编程操作进行准确的协同处理,因此本实施例中先根据所述目标编程作品的积木搭建结构将其转换为预设格式的所述目标文档,从而将图形化的目标编程作品转换为准确的包含有相应代码数据的目标文档,该目标文档中的代码数据是与目标编程作品的搭建结构实时映射的,对目标文档的更改可对应得到对目标编程作品的更改因此在第二客户端上,因此在协同编程时可根据所述第一目标协同信息对该目标文档进行编辑后还原得到相应的编程操作,实现协同编程。优选地,所述目标文档采用JSON格式,且JSON格式的所述目标文档通过预设结构来保存所述目标编程作品的代码数据,例如采用树形结构的JSON文档以适配预设的解析类库中的解析与冲突处理规则,实现对文档编辑冲突的解决,该目标文档的转换生成方式在第一客户端执行的方法中已经详细介绍过,此处不作赘述。
S302、根据所述第一目标协同信息对所述目标文档进行编辑,所述目标文档用于映射目标编程作品的代码数据。
本实施例中,在第二客户端接收到所述第一目标协同信息后,此时接收到的所述第一目标协同信息已解决了与服务器收到的历史协同信息之间的编辑冲突,因此将其应用于第二客户端本地的目标文档上,通过所述第一目标协同信息对所述目标文档进行相应的编辑操作实现文档协同编辑,所述目标代码文档用于映射目标编程作品的代码数据,以实时反映经操作转换处理后的第一编程操作对代码数据的更改,实现对目标编程作品的文档数据层面的协同编辑。
进一步地,所述根据所述第一目标协同信息对所述目标文档进行编辑,包括:
确认所述第二客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态;
若所述第二客户端的协同状态为已同步状态,则根据所述第一目标协同信息对所述目标文档进行编辑;
若所述第二客户端的协同状态为等待确认状态或带缓冲等待状态,则对所述第一目标协同信息进行二次操作转换处理,根据经二次操作转换处理后的第一目标协同信息对所述目标文档进行编辑。
本实施例中,类似地,所述第二客户端在不同时刻也具有不同的协同状态,以便实现更加有序准确的协同编程,各个协同状态的含义在第一客户端执行的方法中已经详细介绍过,此处不作赘述。若所述第二客户端当前处于已同步状态,说明之前发出的协同信息均已收到确认信息进行了同步,且没有其他滞留待发的协同信息,此时直接将经操作转换处理后的所述第一目标协同信息应用于所述目标文档,实现积木代码文档层面的协同编辑。
若所述第二客户端当前处于等待确认状态或带缓冲等待状态,说明此时第二客户端本地存在已发出、暂未收到服务器返回的指令确认信息的协同信息,或者存在已发出、暂未收到服务器返回的指令确认信息的协同信息和待发送的协同信息,即虽然此时接收到的所述第一目标协同信息已在服务器上解决了多个客户端之间的协同文档编辑冲突,但是可能与第二客户端上未被确认以及未发送的协同信息发生冲突,因此需要在第二客户端上对接收到的所述第一目标协同信息进行二次操作转换处理,以解决本地客户端上的文档编辑冲突,根据经二次操作转换处理后的第一目标协同信息来对目标文档进行编辑,确保文档数据层面进行协同编辑的准确性。
具体地,操作转换处理是指通过OT(operation transformation操作转换)算法在多端协同中保持不同的数据副本一致性的方法,使得在不同的终端根据服务器接收到的操作顺序的不同,对操作进行调整从而保持数据的一致性,实现高效实时且准确的协同编辑,由于基于OT的协同编辑是完全实时的,因此不会出现编辑延迟的现象,同时OT处理的转换方式可根据不同的应用场景预先定义不同的转换函数作为操作转换规则,以适应不同编辑场景的操作转换需要,其为现有技术,此处不作赘述,通过操作转换处理确保在不同客户端发送给服务器的协同信息存在冲突,或者客户端接收到的协同信息与本地暂未发送的协同信息存在编辑冲突时,均能准确灵活的进行操作转换处理以解决冲突,实现准确无误的目标文档的协同编辑。
具体实施时,可以通过预设的解析类库来进行协同信息的解析以及操作转换规则的保存,即预设一个支持操作转换处理的解析类库,其支持预设的基础操作,通过该解析类库可对转换生成的协同信息进行解析,得到协同信息中包含的基础操作从而对目标文档进行相应的编辑,同时还根据解析结果以及操作转换规则来解决不同协同信息之间的操作冲突,具体可根据协同信息的接收顺序、协同信息的操作对象等调用不同的操作转换规则,例如以目标文档为树形结构的JSON文档为例,若当前接收到的协同信息是移动子树A,历史协同信息是删除子树A,则当前的协同信息是存在冲突的指令,按照解析类库中的转换规则,当前的协同信息被转换为null,从而避免文档编辑错误甚至引发编程崩溃等情况,确保协同编程的准确性和可靠性。
S303、将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作。
本实施例中,在执行第一目标协同信息所映射的编程操作时,需对所述第一目标协同信息进行还原处理,得到对应的用于更改所述目标编程作品的搭建结构的第一目标编程操作,可以理解的是,该还原过程与第一协同信息的生成过程是相反的,从而将对目标文档中代码数据的更改实时映射为对目标编程作品的搭建结构的更改。其中,由于编程操作与协同信息是一一对应的,因此所述第一目标编程操作可以视为是第一客户端上输入的第一编程操作进行操作转换得到的,即在第一客户端上对目标作品执行所述第一编程操作,而在第二客户端上则协同执行经操作转换后得到的第一目标编程操作,而非初始的第一编程操作,以避免不同客户端之间由于操作冲突导致的协同编程错误。
进一步地,所述将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作,包括:
根据预设的解析类库对所述第一目标协同信息进行解析,获取所述第一目标协同信息中包含的用于更改所述代码数据的第一目标文档操作;
基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改,
或者,
对所述第一目标协同信息进行分解后得到若干个单位协同信息;
根据预设的解析类库对所述单位协同信息依次进行解析,获取各个单位协同信息中包含的对所述代码数据的第一目标文档操作;
基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改。
本实施例中,在接收到所述第一目标协同信息后,则通过预设的解析类库对其进行解析,从而将第一目标协同信还原为对目标编程作品的第一目标编程操作,具体根据第一客户端发送第一协同信息的不同可分为两种情况,当第一客户端是将单次获得的第一编程操作转换为第一协同信息并发送给服务器进行操作转换处理时,此时经操作转换得到的第一目标协同信息是独立指令而非组合指令,因此直接解析获取所述第一目标协同信息中包含的第一目标文档操作,类似的,所述第一目标文档操作是预设的用于更改所述目标文档中的代码数据的基础操作,所述第一目标协同信息中可包含一个或多个基础操作,通过原子性更高的基础操作来编辑所述目标文档中的代码数据更有利于编辑冲突的解决,基于所述第一目标文档操作对所述代码数据的更改,同样调用预设转换方法进行协同信息与编程操作之间的转换,将获得的单条第一目标协同信息还原为单次的第一目标编程操作,从而将一个或多个的基础操作对所述目标文档的更改映射还原为对所述目标编程作品的搭建结构的更改。
而当第一客户端是将预设操作节点内的若干个第一编程操作作为操作组合进行转换,进而生成第一协同信息时,此时经操作转换得到的第一目标协同信息可进行分解,得到若干个单位协同信息,因此通过预设的解析类库对全部单位协同信息依次进行解析,获取各个单位协同信息中包含的第一目标文档操作(同样为预设的基础操作),每个单位协同信息中可包含一个或多个基础操纵,基于所述第一目标文档操作对所述代码数据的更改,同样调用预设转换方法进行协同信息与编程操作之间的转换,按解析顺序对转换结果进行组合后还原得到所述第一目标编程操作,此时的第一目标编程操作为一个操作组合,其中包含了至少两个具有顺序依赖的编程操作,实现不同协同编程操作的还原,避免操作组合协同时的错误解析。
在具体还原时,是将一个或多个第一目标文档操作转换还原为相应的第一目标编程操作,所述第一目标文档操作可包含不同的操作类型,通过不同操作类型的组合来实现相应的第一目标编程操作,以目标文档为树形结构的JSON文档时为例,所述第一目标文档操作包括拾取子树操作、插入子树操作和编辑子树的对象操作这三种类型的基础操作,一个简单的基础操作包括了列表和操作组件,列表中包含找到JSON树中特定内容的路径,操作组件中是对该内容进行的基本操作,从而在进行协同信息与编程操作之间的转换时,通过一种或多种操作类型的第一目标文档操作的组合来还原得到相应的编程操作,将文档数据层面的协同编辑映射为编程操作层面的协同编辑,进而实现准确的协同编程。
S304、展示所述第一目标编程操作对所述目标编程作品进行更改后的协同编程结果。
本实施例中,当还原得到所述第一目标编程操作后,则将该第一目标编程操作应用于所述第二客户端上的目标编程作品,由于所述第一目标编程操作是由经过了操作转换处理得到的第一目标协同信息还原的,该第一目标编程操作已解决了与服务器收到的历史协同信息对应的编程操作之间的冲突,因此第二客户端上的第一目标编程操作对所述目标编程作品进行更改得到的编程结果,与第一客户端上第一编程操作对所述目标编程作品进行更改得到的编程结果是一致的,实现准确高效的积木协同编程。
所述协同编程方法还包括:
当所述第一目标编程操作与本地获取到的第二编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二编程操作和所述第一目标编程操作进行冲突处理。
本实施例中,不仅针对文档编辑进行冲突处理,还进一步在还原得到的第一目标编程操作与第二客户端本地获取到的第二编程操作存在冲突时进行操作层面的冲突处理,由于操作转换处理解决的是协同信息之间的文档编辑冲突,而当所述第二客户端上存在暂未转换生成协同信息的第二编程操作时,操作转换处理是无法对这类第二编程操作进行冲突解决的,此时如果直接将还原得到的第一目标编程操作应用在第二客户端上的目标编程作品上时,会发生编程错误甚至客户端崩溃的情况。
因此,为进一步确保协同编程的正确性,可对从服务器接收到的所述第一目标编程操作与第二客户端本地的第二编程操作进行操作层面的冲突判断,具体可根据编程操作的操作对象是否存在互相包含关系判断,即若不同的编程操作的操作对象之间存在互相包含关系说明存在冲突,否则不存在,当存在冲突时根据不同操作的操作优先级排序来对进行冲突处理,具体的操作优先级排序可以按时间排序,例如获取服务器接收到所述第一协同信息的时间以及本地输入第二编程操作的输入时间,时间越靠前则优先级越高等等,当然还可以采用其他的优先级排序规则,本实施例对此不作限定。具体为,先发送到服务器的操作优先级更高,当第二客户端收到服务器发送的操作时,如果本地有正在进行中的操作,则判断是否存在冲突,判断冲突时,以操作组合为例,先将服务器发送的第一目标协同信息分解后得到单位协同信息,按照断开连接、删除、移动、连接的顺序,依次判断单位协同信息所对应的操作是否与本地的第二编程操作存在冲突,以积木的拖拽为例,当收到服务器发送的第一目标编程操作中存在对积木的删除、移动、连接操作时,都需要检查当前第二客户端上是否在进行拖拽操作,然后做冲突处理,如果服务器发送的第一目标编程操作中拖拽的积木组与本地的第二编程操作正在拖拽的积木组存在互相包含关系,说明存在冲突,当存在冲突时,由于先发送到服务器的操作优先级更高,此时则取消本地的第二编程操作,将本地的第二编程操作造成的对象改变回退,并且清空本地操作产生的事件,确保在客户端的操作层面不会出现操作冲突,提高协同编程的准确性。
所述协同编程方法还包括:
获取对目标编程作品的第二编程操作;
将所述第二编程操作转换为用于编辑所述目标文档的第二协同信息;
当获取到分享指令时,向服务器发送所述第二协同信息,所述分享指令用于指示所述服务器向所述第一客户端发送第二目标协同信息,
其中,所述第二目标协同信息为所述第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突。
本实施例中,当用户通过第二账号登录第二客户端后,可以由用户在所述第二客户端上的图形编程界面输入对目标编程作品的第二编程操作,将所述第二编程操作对应转换为用于编辑所述目标文档的第二协同信息,之后用户可通过点击图形编程界面上预设的例如“分享”按钮输入分享指令,当获取到该分享指令后,则向服务器发送已转换得到的所述第二协同信息,通过所述分享指令指示所述服务器向指定的第一客户端发送第二目标协同信息即可实现编程操作的协同共享,其中,所述第二目标协同信息为所述第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突,使得在所述第一客户端上展示所述第一目标协同信息对所述目标文档进行编辑后对应的协同编程结果,类似的,所述第二协同信息的生成方法与第一协同信息的生成方法相同,所述第二目标协同信息的发送方法与第一目标协同信息的发送方法相同,此处不作赘述。
即各个第二客户端不仅可以接收服务器发送的第一目标协同信息,同样也可以向服务器发送基于第二编程操作生成的第二协同信息,通过服务器进行操作转换处理后向第一客户端发送所述第二目标协同信息,从而在所述第一客户端的本地界面展示所述第二目标协同信息对所述目标文档进行编辑后对应的协同编程结果,由此可实现多个客户端之间对相同的目标编程作品进行协同编程,增强了不同客户端的使用用户之间的信息互通性和编程效率。
以上主要从参与协同编程的客户端的角度对协同编程方法进行介绍,以下将从服务器的角度对协同编程方法进行介绍。
请参阅图5,图5为本发明提供的协同编程方法一个实施例的流程图,该方法应用于。
如图5所示,该方法具体包括如下步骤:
S501、接收第一客户端发送的第一协同信息和分享指令,所述第一协同信息用于对映射目标编程作品的目标文档进行编辑,所述分享指令中携带第二客户端的标识。
本实施例中,服务器接收第一客户端发送的第一协同信息和分享指令,其中第一协同信息是根据第一客户端上对目标编程作品的第一编程操作转换得到,用于对与目标编程作品实时映射的目标文档进行编辑,所述分享指令中携带有第二客户端的标识,所述分享指令用于指示服务器向所述标识确定的第二客户端进行信息协同处理,所述第一协同信息的转换生成方式在第一客户端执行的方法中已经详细介绍过,此处不作赘述。
进一步地,如图6所示,所述步骤S501之前,所述方法还包括步骤:
S504、根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并分发给所述第一客户端和第二客户端。
本实施例中,所述目标编程作品保存在所述服务器的共享空间内,通过服务器根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档,并将所述目标文档分发给所述第一客户端和第二客户端,也就是说,本实施例中将目标编程作品转换为目标文档的转换操作在服务器上执行,各个客户端无需进行转换操作,直接从服务器上获取该目标文档即可,提高处理效率。优选地,所述目标文档采用JSON格式,且JSON格式的所述目标文档通过预设结构来保存所述目标编程作品的代码数据,以适配预设的解析类库中的解析与冲突处理规则,实现对文档编辑冲突的解决,该目标文档的转换生成方式在第一客户端执行的方法中已经详细介绍过,此处不作赘述。
S502、根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,以解决所述第一协同信息与历史协同信息之间的编辑冲突。
服务器在接收到所述第一协同信息时则根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理,采用的操作转换处理方式在第二客户端执行的方法中已经详细介绍过,此处不作赘述。
进一步地,所述根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,包括:
获取所述历史协同信息与所述第一协同信息的指令接收时间,并对指令接收时间进行排序,所述历史协同信息来源于第一客户端或第二客户端;
在所述第一协同信息与所述历史协同信息之间存在冲突时,根据指令接收时间的排序按预设转换规则对所述第一协同信息进行操作转换处理,以解决所述第一协同信息与历史协同信息之间的编辑冲突。
本实施例中,将所述历史协同信息与所述第一协同信息按指令接收时间进行排序,由于第一客户端和第二客户端均可向外发送协同信息,因此所述历史协同信息可能来源于第一客户端或第二客户端,在操作转换处理时需要一同考虑,若所述第一协同信息与所述历史协同信息之间存在冲突时,具体可根据各个指令的执行对象是否存在互相包含关系来确定,并根据指令接收时间排序按预设转换规则对所述第一协同信息进行操作转换处理,即在预设的解析类库中调用相应的操作转换规则来解决各类指令冲突,采用的操作转换处理方式在第二客户端执行的方法中已经详细介绍过,此处不作赘述。
S503、根据所述分享指令的指示,向所述标识确定的所述第二客户端发送所述第一目标协同信息。
本实施例中,在所述分享指令的指示下,通过所述分享指令中携带的所述标识向对应的第二客户端发送经操作转换处理后得到的所述第一目标协同信息,具体所述标识可以是第二客户端的地址信息,例如IP地址,或者也可以是当前使用第二客户端的用户的ID信息等等,服务器通过准确的标识信息向第一客户端指定的第二客户端发送所述第一目标协同信息,确保协同编程中协同信息的准确分发共享。
进一步地,所述步骤S502之后,还包括:
向所述第一客户端发送指令确认信息。
本实施例中,当服务器对接收到的所述第一协同信息进行了操作转换处理后,则及时向所述第一客户端发送指令确认信息,以便第一客户端获知当前发出的第一协同信息的处理状态,并且基于第一协同信息的处理状态更新自身的协同状态,实现准确的状态更新,确保在协同编程过程中的有序性和状态可视性。
具体地,结合图7和图8对本实施例中不同客户端与服务器之间的通信过程进行说明:
如图7所示,各个客户端中均具有OT模块来实现编程操作与协同信息之间的转换,其中,OT模块由OT适配器和OT客户机组成,其中所述OT适配器(OT Adapter)包括两个转换单元,第一转换单元用于将编程操作转换为OT指令,第二转换单元用于将OT指令还原为编程操作;所述OT客户机(OT Client)用于维护客户端的协同状态以及逻辑处理,以及和服务器之间进行交互;所述服务器(OT Server)用于进行多客户端之间OT指令的操作转换处理与指令分发,通过构建该操作转换模型可对JSON文档进行同时编辑并解决冲突。
具体应用时,如图8所示,当用户A在其使用的客户端A上对目标编程作品执行了编程操作A,希望将该编程操作A同步至用户B使用的客户端B上,此时,将客户端A该编程操作A发送给OT适配器(OT Adapter),OT适配器将编程操作A转换为OT指令,然后把OT指令发送给OT客户机(OT Client),之后OT客户机根据客户端A当前的状态,进行不同的处理:
若客户端A当前为已同步(Synchronized)状态,则立即将OT指令发送给服务器,协同状态转为等待确认(Awaiting Confirm)状态;
若客户端A当前为等待确认(Awaiting Confirm)状态,则不立即发送指令,协同状态转为带缓冲等待(Awaiting With Buffer)状态;
若客户端A当前为带缓冲等待(Awaiting With Buffer)状态,则不立即发送指令,状态保持为带缓冲等待(Awaiting With Buffer)。
服务器根据历史接收到的OT指令对当前接收到的客户端A发送的OT指令进行操作转换处理,并且向指令的来源客户端即客户端A发送指令确认信息,向其他客户端即客户端B发送经操作转换处理后的OT指令。
进一步地,客户端A中的OT客户机收到该指令确认信息后,根据客户端A当前的状态,进行不同的处理:
若客户端A为Synchronized状态,此时不应该有等待的确认信息,因此抛出错误消息;
若客户端A为Awaiting Confirm状态,则将协同状态更新为Synchronized;
若客户端A为Awaiting With Buffer状态,表明上一个指令已被确认,则发送缓存中的指令,且在缓存中没有其它指令时将协同状态更新为Awaiting Confirm,否则保持为Awaiting With Buffer状态。
进一步地,客户端B中的OT客户机收到服务发送的经操作转换处理后的OT指令,服务器根据待协同客户端当前的状态,进行不同的处理:
若客户端B为Synchronized状态,直接将OT指令应用到本地的共享积木代码JSON文档,并把OT指令发送给待协同客户端中的OT适配器,状态保持为Synchronized;
若客户端B为Awaiting Confirm状态,本地未确认的指令可能与收到的指令发生冲突,因此需要通过OT客户机先进行二次操作转换,若OT客户机转换成功,则将转换后的OT指令应用到本地的共享积木代码JSON文档并发送给OT适配器,状态保持为AwaitingConfirm,否则抛出错误;
若客户端B为Awaiting With Buffer状态,通过OT客户机对收到的指令与本地待确认的指令、本地待发送的指令一同进行二次操作转换,若OT客户机转换成功,则将转换后的OT指令应用到本地的共享积木代码JSON文档并发送给OT适配器,状态保持为AwaitingWith Buffer,否则抛出错误。
客户端B中OT适配器收到已解决文档编辑冲突的OT指令,将其还原为经操作转换后的编程操作A,并解决还原得到的编程操作A与本地编程操作之间的操作冲突后将还原得到的编程操作A应用于客户端B上的目标编程作品,从而将用户A在客户端A上输入的积木编程操作实时准确的同步至用户B登录使用的客户端B中,实现准确高效的协同编程。
由以上方法实施例可知,本发明提供的协同编程方法通过文档来实时映射编程作品的代码数据,在协同编程时将编程操作转换为用于编辑文档的协同信息并分发给各客户端,实现编程操作的实时共享,并且通过操作转换处理来解决不同客户端对目标文档的编辑冲突,得到准确实时的协同编程结果。
需要说明的是,上述各步骤之间并不必然存在一定的先后顺序,本领域普通技术人员,根据本发明实施例的描述可以理解,不同实施例中,上述各步骤可以有不同的执行顺序,亦即,可以并行执行,亦可以交换执行等等。
本发明另一实施例提供一种协同编程装置,该装置可应用于安装有第一客户端的第一终端设备上,如图9所示,装置900包括:
操作获取模块901,用于获取对目标编程作品的第一编程操作;
信息生成模块902,用于将所述第一编程操作转换为用于编辑目标文档的第一协同信息,所述目标文档用于映射所述目标编程作品的代码数据;
信息发送模块903,用于
当获取到分享指令时,向服务器发送所述第一协同信息,所述分享指令用于指示所述服务器向与所述第一客户端协同通信的第二客户端发送第一目标协同信息,
其中,所述第一目标协同信息为所述第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突。
所述操作获取模块901、信息生成模块902和信息发送模块903依次连接,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述协同编程的执行过程,各模块的具体实施方式请参考上述对应的方法实施例,此处不再赘述。
进一步地,所述协同编程装置还包括:
文档转换模块,用于根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
进一步地,所述信息生成模块902包括:
第一转换单元,用于基于所述第一编程操作对所述目标编程作品的更改,调用预设转换方法将所述第一编程操作转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;
第一生成单元,用于根据所述第一文档操作生成所述第一协同信息,所述第一协同信息用于将所述第一编程操作映射为对所述目标文档中代码数据的更改;
第二转换单元,用于基于预设操作节点内的操作组合对所述目标编程作品的更改,调用预设转换方法将所述操作组合包含的所述第一编程操作依次转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;
第二生成单元,用于根据所述第一文档操作生成单位协同信息,并按转换顺序对所述单位协同信息进行组合后得到所述第一协同信息,所述第一协同信息用于将所述操作组合映射为对所述目标文档中代码数据的更改。
进一步地,所述信息发送模块903包括:
状态确认单元,用于当获取到分享指令时确认所述第一客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态,所述分享指令中携带所述第二客户端的标识;
指令发送单元,用于若所述第一客户端的协同状态为已同步状态,则向服务器发送所述第一协同信息,通过所述分享指令指示所述服务器向所述标识确定的所述第二客户端发送所述第一目标协同信息。
进一步地,所述协同编程装置还包括:
状态更新模块,用于在向所述服务器发送所述第一协同信息后更新所述第一客户端的协同状态,并且,在接收到所述服务器返回的指令确认信息时更新所述第一客户端的协同状态。
进一步地,所述协同编程装置还包括:
指令获取模块,用于获取协同创建指令,所述协同创建指令用于指示所述第一客户端建立与第二客户端之间的协同通信;
创建模块,用于根据所述协同创建指令创建目标编程作品,并向所述服务器发送所述目标编程作品。
进一步地,所述协同编程装置还包括:
信息接收模块,用于接收所述服务器发送的第二目标协同信息,所述第二目标协同信息为所述第二客户端发送的第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突;
文档编辑模块,用于根据所述第二目标协同信息对所述目标文档进行编辑;
执行展示模块,用于展示所述第二目标协同信息对所述目标文档进行编辑后映射得到的所述目标编程作品的协同编程结果。
进一步地,所述协同编程装置还包括:
操作还原模块,用于将所述第二目标协同信息还原为用于更改所述目标编程作品的第二目标编程操作;
冲突处模块,用于当所述第二目标编程操作与本地获取到的所述第一编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二目标编程操作和所述第一编程操作进行冲突处理。
本发明另一实施例提供一种协同编程装置,该装置可应用于安装有第二客户端的第二终端设备上,如图10所示,装置1000包括:
信息接收模块1001,用于接收服务器发送的第一目标协同信息,所述第一目标协同信息为所述第一客户端发送的第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突;
文档编辑模块1002,用于根据所述第一目标协同信息对所述目标文档进行编辑,所述目标文档用于映射目标编程作品的代码数据;
操作还原模块1003,用于将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作;
执行展示模块1004,用于展示所述第一目标编程操作对所述目标编程作品进行更改后的协同编程结果。
所述信息接收模块1001、文档编辑模块1002、操作还原模块1003和执行展示模块1004依次连接,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述协同编程的执行过程,各模块的具体实施方式请参考上述对应的方法实施例,此处不再赘述。
进一步地,所述协同编程装置还包括:
文档转换模块,用于根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
进一步地,所述文档编辑模块1002包括:
状态确认单元,用于确认所述第二客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态;
编辑单元,用于若所述第二客户端的协同状态为已同步状态,则根据所述第一目标协同信息对所述目标文档进行编辑;
以及,若所述第二客户端的协同状态为等待确认状态或带缓冲等待状态,则对所述第一目标协同信息进行二次操作转换处理,根据经二次操作转换处理后的第一目标协同信息对所述目标文档进行编辑。
进一步地,所述操作还原模块1003包括:
第一解析单元,用于根据预设的解析类库对所述第一目标协同信息进行解析,获取所述第一目标协同信息中包含的用于更改所述代码数据的第一目标文档操作;
第一还原单元,用于基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改
分解单元,用于对所述第一目标协同信息进行分解后得到若干个单位协同信息;
第二解析单元,用于根据预设的解析类库对所述单位协同信息依次进行解析,获取各个单位协同信息中包含的对所述代码数据的第一目标文档操作;
第二还原单元,用于基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改。
进一步地,所述协同编程装置还包括:
冲突处理模块,用于当所述第一目标编程操作与本地获取到的第二编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二编程操作和所述第一目标编程操作进行冲突处理。
进一步地,所述协同编程装置还包括:
创建模块,用于创建目标编程作品,并向所述服务器发送所述目标编程作品;
作品接收模块,用于接收所述服务器发送的所述目标编程作品
进一步地,所述协同编程装置还包括:
操作获取模块,用于获取对目标编程作品的第二编程操作;
信息生成模块,用于将所述第二编程操作转换为用于编辑所述目标文档的第二协同信息;
信息发送模块,用于当获取到分享指令时,向服务器发送所述第二协同信息,所述分享指令用于指示所述服务器向所述第一客户端发送第二目标协同信息,
其中,所述第二目标协同信息为所述第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突。
本发明另一实施例提供一种服务器,如图11所示,服务器1100包括:
接收模块1101,用于接收第一客户端发送的第一协同信息和分享指令,所述第一协同信息用于对映射目标编程作品的目标文档进行编辑,所述分享指令中携带第二客户端的标识;
操作转换模块1102,用于根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,以解决所述第一协同信息与历史协同信息之间的编辑冲突;
发送模块1103,用于根据所述分享指令的指示,向所述标识确定的所述第二客户端发送所述第一目标协同信息。
所述接收模块1101、操作转换模块1102和发送模块1103依次连接,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述协同编程的执行过程,各模块的具体实施方式请参考上述对应的方法实施例,此处不再赘述。
进一步地,所述服务器还包括:
文档转换模块,用于根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并分发给所述第一客户端和第二客户端。
进一步地,所述操作转换模块1102包括:
排序单元,用于获取所述历史协同信息与所述第一协同信息的指令接收时间,并对指令接收时间进行排序,所述历史协同信息来源于第一客户端或第二客户端;
操作转换单元,用于在所述第一协同信息与所述历史协同信息之间存在冲突时,根据指令接收时间的排序按预设转换规则对所述第一协同信息进行操作转换处理,以解决所述第一协同信息与历史协同信息之间的编辑冲突。
进一步地,所述服务器还包括:
确认模块,用于向所述第一客户端发送指令确认信息。
本发明另一实施例提供一种协同编程系统,如图12所示,系统1200包括:
一个或多个处理器1201以及存储器1202,图12中以一个处理器1201为例进行介绍,处理器1201和存储器1202可以通过总线或者其他方式连接,图12中以通过总线连接为例。
处理器1201用于完成系统1200的各种控制逻辑,其可以为通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、单片机、ARM(Acorn RISCMachine)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。还有,处理器1201还可以是任何传统处理器、微处理器或状态机。处理器1201也可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP和/或任何其它这种配置。
存储器1202作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的协同编程方法对应的程序指令。处理器1201通过运行存储在存储器1202中的非易失性软件程序、指令以及单元,从而执行系统1200的各种功能应用以及数据处理,即实现上述方法实施例中的协同编程方法。
存储器1202可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据系统1200使用所创建的数据等。此外,存储器1202可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器1202可选包括相对于处理器1201远程设置的存储器,这些远程存储器可以通过网络连接至系统1200。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个单元存储在存储器1202中,当被一个或者多个处理器1201执行时,执行上述任意方法实施例中的协同编程方法,例如,执行以上描述的图1中的方法步骤S101至步骤S103,或者执行以上描述的图3中的方法步骤S301至步骤S304,或者执行以上描述的图5中的方法步骤S501至步骤S503。
本发明实施例提供了一种非易失性计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如,执行以上描述的图1中的方法步骤S101至步骤S103,或者执行以上描述的图3中的方法步骤S301至步骤S304,或者执行以上描述的图5中的方法步骤S501至步骤S503。
作为示例,非易失性存储介质能够包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦ROM(EEPROM)或闪速存储器。易失性存储器能够包括作为外部高速缓存存储器的随机存取存储器(RAM)。通过说明而非限制,RAM可以以诸如同步RAM(SRAM)、动态RAM、(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、Synchlink DRAM(SLDRAM)以及直接Rambus(兰巴斯)RAM(DRRAM)之类的许多形式得到。本文中所描述的操作环境的所公开的存储器组件或存储器旨在包括这些和/或任何其他适合类型的存储器中的一个或多个。
综上所述,本发明公开的一种协同编程方法、装置、系统、服务器及介质中,方法获取对目标编程作品的第一编程操作;将第一编程操作转换为用于编辑目标文档的第一协同信息,目标文档用于映射目标编程作品的代码数据;当获取到分享指令时,向服务器发送第一协同信息,以指示服务器向第二客户端发送第一目标协同信息,第一目标协同信息是对第一协同信息进行操作转换处理得到的,以解决第一协同信息与历史协同信息的编辑冲突。通过目标文档来实时映射目标编程作品的代码数据,在协同编程时将对目标编程作品的编程操作转换为用于编辑目标文档的协同信息并分发给各客户端,以实现编程操作的实时共享,提高了协同编程的实时性,并且还通过操作转换处理来解决不同客户端对目标文档的编辑冲突,提高协同编程的准确性,进而得到实时准确的协同编程结果。
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的计算机程序可存储于一非易失性计算机可读取的存储介质中,该计算机程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、软盘、闪存、光存储器等。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (26)
1.一种协同编程方法,其特征在于,所述方法应用于第一客户端,所述方法包括:
获取对目标编程作品的第一编程操作;
将所述第一编程操作转换为用于编辑目标文档的第一协同信息,所述目标文档用于映射所述目标编程作品的代码数据;
当获取到分享指令时,向服务器发送所述第一协同信息,所述分享指令用于指示所述服务器向与所述第一客户端协同通信的第二客户端发送第一目标协同信息;
其中,所述第一目标协同信息为所述第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突。
2.根据权利要求1所述的协同编程方法,其特征在于,所述将所述第一编程操作转换为用于编辑目标文档的第一协同信息,包括:
基于所述第一编程操作对所述目标编程作品的更改,调用预设转换方法将所述第一编程操作转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;
根据所述第一文档操作生成所述第一协同信息,所述第一协同信息用于将所述第一编程操作映射为对所述目标文档中代码数据的更改,
或者,
基于预设操作节点内的操作组合对所述目标编程作品的更改,调用预设转换方法将所述操作组合包含的所述第一编程操作依次转换为对应的第一文档操作,所述第一文档操作用于对应更改所述目标文档中的代码数据;
根据所述第一文档操作生成单位协同信息,并按转换顺序对所述单位协同信息进行组合后得到所述第一协同信息,所述第一协同信息用于将所述操作组合映射为对所述目标文档中代码数据的更改。
3.根据权利要求2所述的协同编程方法,其特征在于,当所述目标文档为树形结构的JSON文档时,所述第一文档操作包括拾取子树操作、插入子树操作和编辑子树的对象操作。
4.根据权利要求1所述的协同编程方法,其特征在于,所述当获取到分享指令时,向服务器发送所述第一协同信息,包括:
当获取到分享指令时确认所述第一客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态,所述分享指令中携带所述第二客户端的标识;
若所述第一客户端的协同状态为已同步状态,则向服务器发送所述第一协同信息,通过所述分享指令指示所述服务器向所述标识确定的所述第二客户端发送所述第一目标协同信息。
5.根据权利要求4所述的协同编程方法,其特征在于,所述方法还包括:
在向所述服务器发送所述第一协同信息后更新所述第一客户端的协同状态,并且,在接收到所述服务器返回的指令确认信息时更新所述第一客户端的协同状态。
6.根据权利要求1所述的协同编程方法,其特征在于,所述方法还包括:
获取协同创建指令,所述协同创建指令用于指示所述第一客户端建立与第二客户端之间的协同通信;
根据所述协同创建指令创建目标编程作品,并向所述服务器发送所述目标编程作品。
7.根据权利要求1所述的协同编程方法,其特征在于,所述方法还包括:
接收所述服务器发送的第二目标协同信息,所述第二目标协同信息为所述第二客户端发送的第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突;
根据所述第二目标协同信息对所述目标文档进行编辑;
展示所述第二目标协同信息对所述目标文档进行编辑后映射得到的所述目标编程作品的协同编程结果。
8.根据权利要求7所述的协同编程方法,其特征在于,所述方法还包括:
将所述第二目标协同信息还原为用于更改所述目标编程作品的第二目标编程操作;
当所述第二目标编程操作与本地获取到的所述第一编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二目标编程操作和所述第一编程操作进行冲突处理。
9.根据权利要求1所述的协同编程方法,其特征在于,所述获取对目标编程作品的第一编程操作之前,所述方法还包括:
根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
10.一种协同编程方法,其特征在于,所述方法应用于第二客户端,所述第二客户端与第一客户端协同通信,所述方法包括:
接收服务器发送的第一目标协同信息,所述第一目标协同信息为所述第一客户端发送的第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突;
根据所述第一目标协同信息对所述目标文档进行编辑,所述目标文档用于映射目标编程作品的代码数据;
将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作;
展示所述第一目标编程操作对所述目标编程作品进行更改后的协同编程结果。
11.根据权利要求10所述的协同编程方法,其特征在于,所述根据所述第一目标协同信息对所述目标文档进行编辑,包括:
确认所述第二客户端的协同状态,所述协同状态包括已同步状态、等待确认状态以及带缓冲等待状态;
若所述第二客户端的协同状态为已同步状态,则根据所述第一目标协同信息对所述目标文档进行编辑;
若所述第二客户端的协同状态为等待确认状态或带缓冲等待状态,则对所述第一目标协同信息进行二次操作转换处理,根据经二次操作转换处理后的第一目标协同信息对所述目标文档进行编辑。
12.根据权利要求10所述的协同编程方法,其特征在于,所述将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作,包括:
根据预设的解析类库对所述第一目标协同信息进行解析,获取所述第一目标协同信息中包含的用于更改所述代码数据的第一目标文档操作;
基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改,
或者,
对所述第一目标协同信息进行分解后得到若干个单位协同信息;
根据预设的解析类库对所述单位协同信息依次进行解析,获取各个单位协同信息中包含的对所述代码数据的第一目标文档操作;
基于所述第一目标文档操作对所述代码数据的更改,调用预设转换方法将所述第一目标文档操作还原为第一目标编程操作,所述第一目标编程操作用于将所述第一目标协同信息映射为对所述目标编程作品的搭建结构的更改。
13.根据权利要求12所述的协同编程方法,其特征在于,所述当所述目标文档为树形结构的JSON文档时,所述第一目标文档操作包括拾取子树操作、插入子树操作、编辑子树的对象操作。
14.根据权利要求10所述的协同编程方法,其特征在于,所述方法还包括:
当所述第一目标编程操作与本地获取到的第二编程操作之间存在冲突时,根据预设的操作优先级排序对所述第二编程操作和所述第一目标编程操作进行冲突处理。
15.根据权利要求10所述的协同编程方法,其特征在于,所述方法还包括:
创建目标编程作品,并向所述服务器发送所述目标编程作品,
或者,
接收所述服务器发送的所述目标编程作品。
16.根据权利要求10所述的协同编程方法,其特征在于,所述方法还包括:
获取对目标编程作品的第二编程操作;
将所述第二编程操作转换为用于编辑所述目标文档的第二协同信息;
当获取到分享指令时,向服务器发送所述第二协同信息,所述分享指令用于指示所述服务器向所述第一客户端发送第二目标协同信息,
其中,所述第二目标协同信息为所述第二协同信息经过操作转换处理得到的,以解决所述第二协同信息与服务器收到的历史协同信息之间的编辑冲突。
17.根据权利要求10所述的协同编程方法,其特征在于,所述接收服务器发送的第一目标协同信息之前,所述方法还包括:
根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并保存在本地。
18.一种协同编程方法,所述方法应用于服务器,其特征在于,包括:
接收第一客户端发送的第一协同信息和分享指令,所述第一协同信息用于对映射目标编程作品的目标文档进行编辑,所述分享指令中携带第二客户端的标识;
根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,以解决所述第一协同信息与历史协同信息之间的编辑冲突;
根据所述分享指令的指示,向所述标识确定的所述第二客户端发送所述第一目标协同信息。
19.根据权利要求18所述的协同编程方法,其特征在于,所述根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,包括:
获取所述历史协同信息与所述第一协同信息的指令接收时间,并对指令接收时间进行排序,所述历史协同信息来源于第一客户端或第二客户端;
在所述第一协同信息与所述历史协同信息之间存在冲突时,根据指令接收时间的排序按预设转换规则对所述第一协同信息进行操作转换处理,以解决所述第一协同信息与历史协同信息之间的编辑冲突。
20.根据权利要求18所述的协同编程方法,其特征在于,所述根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理得到第一目标协同信息之后,所述方法还包括:
向所述第一客户端发送指令确认信息。
21.根据权利要求18所述的协同编程方法,其特征在于,所述接收第一客户端发送的第一协同信息和分享指令之前,所述方法还包括:
根据所述目标编程作品的搭建结构将所述目标编程作品转换为预设格式的目标文档并分发给所述第一客户端和第二客户端。
22.一种协同编程装置,其特征在于,包括:
操作获取模块,用于获取对目标编程作品的第一编程操作;
信息生成模块,用于将所述第一编程操作转换为用于编辑目标文档的第一协同信息,所述目标文档用于映射所述目标编程作品的代码数据;
信息发送模块,用于当获取到分享指令时,向服务器发送所述第一协同信息,所述分享指令用于指示所述服务器向与所述第一客户端协同通信的第二客户端发送第一目标协同信息,其中,所述第一目标协同信息为所述第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突。
23.一种协同编程装置,其特征在于,包括:
信息接收模块,用于接收服务器发送的第一目标协同信息,所述第一目标协同信息为所述第一客户端发送的第一协同信息经过操作转换处理得到的,以解决所述第一协同信息与服务器收到的历史协同信息之间的编辑冲突;
文档编辑模块,用于根据所述第一目标协同信息对所述目标文档进行编辑,所述目标文档用于映射目标编程作品的代码数据;
操作还原模块,用于将所述第一目标协同信息还原为用于更改所述目标编程作品的第一目标编程操作;
执行展示模块,用于展示所述第一目标编程操作对所述目标编程作品进行更改后的协同编程结果。
24.一种服务器,其特征在于,包括:
接收模块,用于接收第一客户端发送的第一协同信息和分享指令,所述第一协同信息用于对映射目标编程作品的目标文档进行编辑,所述分享指令中携带第二客户端的标识;
操作转换模块,用于根据接收记录中的历史协同信息对所述第一协同信息进行操作转换处理后得到第一目标协同信息,以解决所述第一协同信息与历史协同信息之间的编辑冲突;
发送模块,用于根据所述分享指令的指示,向所述标识确定的所述第二客户端发送所述第一目标协同信息。
25.一种协同编程系统,其特征在于,所述系统包括至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-9任一项所述的协同编程方法,或者执行如权利要求10-17任意一项所述的协同编程方法,或者执行如权利要求18-21任意一项所述的协同编程方法。
26.一种非易失性计算机可读存储介质,其特征在于,所述非易失性计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行时,可使得所述一个或多个处理器执行如权利要求1-9任一项所述的协同编程方法,或者执行如权利要求10-17任意一项所述的协同编程方法,或者执行如权利要求18-21任意一项所述的协同编程方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110762446.8A CN113626010A (zh) | 2021-07-06 | 2021-07-06 | 一种协同编程方法、装置、系统、服务器及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110762446.8A CN113626010A (zh) | 2021-07-06 | 2021-07-06 | 一种协同编程方法、装置、系统、服务器及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113626010A true CN113626010A (zh) | 2021-11-09 |
Family
ID=78379101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110762446.8A Pending CN113626010A (zh) | 2021-07-06 | 2021-07-06 | 一种协同编程方法、装置、系统、服务器及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113626010A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115022299A (zh) * | 2022-06-16 | 2022-09-06 | 曙光信息产业(北京)有限公司 | 一种操作系统的远程协同访问方法、装置、设备及介质 |
-
2021
- 2021-07-06 CN CN202110762446.8A patent/CN113626010A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115022299A (zh) * | 2022-06-16 | 2022-09-06 | 曙光信息产业(北京)有限公司 | 一种操作系统的远程协同访问方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10878182B2 (en) | Computing device for convergent document collaboration | |
US9361095B2 (en) | Integrated exchange of search results in an integrated software development environment | |
EP2780826B1 (en) | Browser-based collaborative development of a 3d model | |
US7702729B2 (en) | Event heap: a coordination infrastructure for dynamic heterogeneous application interactions in ubiquitous computing environments | |
US20040133639A1 (en) | System and method for collaboration using web browsers | |
CN111338893B (zh) | 进程日志处理方法、装置、计算机设备以及存储介质 | |
WO2002019131A1 (en) | System and method for collaboration using web browsers | |
CN112988599A (zh) | 一种页面调试方法、装置、电子设备和存储介质 | |
Kraemer et al. | Automated encapsulation of UML activities for incremental development and verification | |
CN113626010A (zh) | 一种协同编程方法、装置、系统、服务器及介质 | |
CN110347522A (zh) | 一种服务端和客户端一体化的实现方法 | |
CN113571162A (zh) | 一种多用户协同操作医学影像的实现方法、装置及系统 | |
US7992091B2 (en) | Message-oriented divergence and convergence of message documents | |
CN114579120A (zh) | 一种应用代码处理方法、装置、电子设备及存储介质 | |
Gadea et al. | Modeling and simulation of an operational transformation algorithm using finite state machines | |
Økland | Developing a Local-First Application with Automerge | |
Kraemer et al. | Unified modeling of service logic with user interfaces | |
Cheverst | Development of a group service to support collaborative mobile groupware | |
MISCHKE | REAL-TIME COLLABORATIVE QDA | |
Gelman et al. | The Complete Redux Book | |
Wu et al. | Toward quality-centered design of groupware architectures | |
Abrahamyan et al. | Collaboration and decision making tools for mobile groups | |
CN116521146A (zh) | 一种云gis平台的二次开发系统 | |
Kallin | Visualizing Distributed Algorithms on the Seattle Platform | |
Gazibegovic et al. | Design and Implementation of a Distributed FleetSimulator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |