首页 / 一种多用户实时代码协同编辑方法

一种多用户实时代码协同编辑方法实质审查 发明

技术领域

[0001] 本发明属于计算机网络与分布式计算机数据结构领域,具体涉及一种多用户实时代码协同编辑方法。

相关背景技术

[0002] 在团队软件开发中,软件开发人员需要进行代码的编写、评审等工作,这些工作需要团队成员之间相互协作。在协作的过程中,团队成员通常需要针对特定代码进行交流,例如:在代码编写过程中,团队中的多名软件开发人员需要对特定代码出现的问题进行解决;在评审过程中,团队中的软件评审人员与软件开发人员需要对特定代码进行讨论和修改。
因此,代码协同编辑在团队软件开发中是必要的。
[0003] 目前,在团队软件开发中,主流的代码协同编辑方式是以代码仓库为基础的代码协同编辑;这种代码协同编辑方式的主要特征是存在一个中央代码仓库,团队成员通过拉取中央代码仓库,创建中央代码仓库的一个本地副本,在本地副本上修改代码后,再将修改后的代码文件推送到中央代码仓库中,将本地副本的修改同步到中央代码仓库中。此时,其余成员才能通过拉取更新后的中央代码仓库获取修改后的代码。
[0004] 前述基于以代码仓库为基础的代码协同编辑方法存在缺乏实时性、缺乏易用性的缺陷。在实时性方面,团队成员对本地代码仓库副本中的代码进行修改时,中央软件存储库并不是实时地随着修改而更新,而是只有当团队成员提交时才会更新,因此其余团队成员无法实时地发现代码的修改情况。在易用性方面,团队成员每次完成代码的修改后,都需要手动地输入提交信息并推送到中央代码仓库中,若修改的次数较多,会降低效率。

具体实施方式

[0067] 为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明,实施方式提及的内容并非对本发明的限定。
[0068] 参照图1所示,本发明的一种多用户实时代码协同编辑方法,应用于客户端及服务端,步骤如下:
[0069] 1)客户端从服务端获取工作目录下的源代码文件列表,并显示于源代码文件列表窗口中;具体包括:
[0070] 1.1)客户端向服务端发送获取源代码文件列表的请求,所述请求包括:用户指定的工作目录路径,工作目录路径是统一资源定位符或服务端本地目录的路径;
[0071] 若所述工作目录路径的类型是服务端本地目录的路径,则服务端将所述工作目录路径下的所有源代码文件列出,作为源代码文件列表;
[0072] 若所述工作目录路径的类型是统一资源定位符,则服务端在网络上访问所述工作目录路径指定的远程资源,并将远程资源上所有的源代码文件列出,作为源代码文件列表;
[0073] 1.2)服务端返回源代码文件列表,源代码文件列表中的各列表项包含:源代码文件名与源代码文件的唯一标识符,唯一标识符是统一资源定位符或服务端本地文件的路径;
[0074] 1.3)客户端将源代码文件列表显示在源代码文件列表窗口中,供用户选择(在窗口中,每一个源代码文件列表项对应一个显示项目,所述显示项目的显示内容包含源代码文件列表项中的文件名;所述显示项目在客户端与相应源代码文件列表项的唯一标识符对应。)。
[0075] 2)选取源代码文件列表窗口中列出的源代码文件,向服务端请求对应源代码文件的内容,并显示于代码编辑窗口中;
[0076] 其中,将源代码文件显示于代码编辑窗口的具体步骤如下:
[0077] 2.1)选择源代码文件列表窗口中对应某一个源代码文件的显示项目,客户端向服务端请求对应源代码文件的内容;所述内容包含与显示项目对应的源代码文件的唯一标识符;
[0078] 2.2)客户端将源代码文件的内容复制到代码编辑窗口的内容缓冲区中,所述内容缓冲区与代码编辑窗口显示的源代码文件内容相同;
[0079] 2.3)判断所述代码编辑窗口显示的源代码文件内容是否发生变化,若发生,则内容缓冲区存储的源代码文件内容随之同步;若未发生,则不执行任何操作,结束;
[0080] 2.4)判断所述内容缓冲区存储的源代码文件内容是否发生变化,若发生,则代码编辑窗口显示的源代码文件内容随之同步;若未发生,则不执行任何操作,结束;
[0081] 2.5)判断代码编辑窗口的内容缓冲区存储的源代码文件内容是否发生修改,若发生,则客户端实时产生修改事件,事件中包含:用户进行修改的范围、用户修改的内容、用户修改的源代码文件名与唯一标识符;若未发生,则不执行任何操作,结束。
[0082] 3)客户端向服务端发送多用户代码协同初始化请求;具体包括:
[0083] 3.1)客户端向服务端发送初始化请求,所述初始化请求包括用户提供的用户昵称和客户端生成的客户端唯一标识符;
[0084] 3.2)服务端将所述用户昵称和唯一标识符保存在客户端信息库中,所述客户端信息库为一个集合,集合元素为用户昵称和用户唯一标识符。
[0085] 4)客户端根据代码编辑窗口中显示的源代码文件的唯一标识符,实时向服务端请求与代码协同相关的共享数据结构;具体包括:
[0086] 4.1)客户端向服务端请求与代码内容协同相关的共享数据结构;其中,请求的内容包括:用户打开的源代码文件的唯一标识符;
[0087] 4.2)服务端根据所述唯一标识符,判断代码内容协同键值对集合中是否存在键与所述唯一标识符相同的键值对,所述键值对集合的键为源代码文件的唯一标识符,值为源代码文件对应的代码内容协同相关的共享数据结构;若查找到,则进入步骤4.5);若未查找到,则进入步骤4.3);
[0088] 4.3)服务端根据所述唯一标识符,获取对应源代码文件的内容;
[0089] 4.4)服务端根据获取的源代码文件内容建立代码内容协同相关的共享数据结构,所述唯一标识符与共享数据结构作为键值对,插入代码内容协同键值对集合中;
[0090] 4.5)服务端将代码内容协同键值对集合中,源代码文件对应的代码内容协同相关的共享数据结构返回至客户端。
[0091] 5)实时判断代码编辑窗口中源代码文件内容是否发生变化,若发生,则客户端实时更新本地共享数据结构,并将修改信息发送给服务端,进入步骤6);若未发生,则重复执行步骤5);具体包括:
[0092] 5.1)客户端实时判断所述代码编辑窗口是否产生了修改事件,若产生了修改事件,则进入步骤5.2);若未产生修改事件,则重复执行步骤5.1);
[0093] 5.2)根据所述修改事件中的用户修改范围、用户修改内容及源代码文件的唯一标识符,对本地共享数据结构进行修改;
[0094] 5.3)客户端将所述用户修改范围、用户修改内容及源代码文件的唯一标识符封装为修改数据包,发送给服务端。
[0095] 其中,对本地共享数据结构进行修改采用CRDT算法。
[0096] 6)服务端将所述修改信息应用到本地共享数据结构副本上,并转发给其他客户端;具体包括:
[0097] 6.1)服务端接收客户端的修改数据包,并根据修改数据包中源代码文件的唯一标识符在代码内容协同键值对集合中查找对应的共享数据结构;
[0098] 6.2)服务端根据所述修改数据包中的用户修改范围、用户修改内容更新步骤6.1)中查找到的共享数据结构;
[0099] 6.3)服务端将对共享数据结构的修改数据包发给其他客户端。
[0100] 其中,所述其他客户端指客户端信息库中除所述修改操作发送者外的每个客户端。
[0101] 7)客户端接收到服务端发送的其他客户端的共享数据结构的修改信息,客户端实时更新代码编辑窗口显示的源代码文件内容;具体包括:
[0102] 7.1)客户端实时接收服务端发送的修改数据包,并根据所述修改数据包中的用户修改范围、用户修改内容及源代码文件的唯一标识信息,对本地共享数据结构副本进行修改;
[0103] 7.2)客户端根据更新后的共享数据结构副本,对本地相应的代码编辑窗口的内容缓冲区进行更新。
[0104] 8)客户端将本地的光标信息发送给服务端;具体包括:
[0105] 8.1)客户端实时获取本地的光标信息,所述光标信息包含:代码编辑窗口当前正在编辑的源代码文件的唯一标识符、代码编辑窗口的光标起始与终止位置、用户提供的用户昵称、客户端后台生成的客户端唯一标识符;
[0106] 8.2)将上述光标信息组织成键值对,其中键包含文件的唯一标识符与客户端唯一标识符,值包含代码编辑窗口的光标起始与终止位置、用户昵称;
[0107] 8.3)客户端向服务端发送插入共享光标键值对请求,将所述键值对插入服务端的共享光标键值对集合中。
[0108] 9)服务端根据客户端发送的光标信息更新光标信息库,再将更新后的光标信息库发送给所有客户端;具体包括:
[0109] 9.1)服务端接收客户端插入共享光标键值对的请求,获得一个键值对,所述键值对的键包含客户端正在编辑文件的唯一标识符与客户端唯一标识符,值包含客户端代码窗口的光标起始与终止位置与客户端出用户指定的昵称;
[0110] 9.2)服务端将所述键值对插入服务端的光标信息库中;
[0111] 9.3)服务端将更新后的共享信息库发送给所有客户端,供客户端更新共享光标。
[0112] 其中,所述步骤9.2)中的光标信息库为一个共享光标键值对集合,其键、值与步骤9.1)中键值对的键、值一致。
[0113] 10)客户端根据更新的光标信息库以一定样式在代码编辑窗口中显示共享光标;具体包括:
[0114] 10.1)客户端实时接收服务端的共享光标键值对集合的最新版本,将键值对集合中的值按键进行过滤,具体方法为:保留键中文件唯一标识符与代码编辑窗口当前正在编辑的源代码文件的唯一标识符相同且键中客户端唯一标识符与客户端本地唯一标识符不同的键值对,并舍其余的键值对;
[0115] 10.2)对过滤后的每一组键值对在代码编辑窗口中以一定样式进行渲染,具体方法为:根据键中客户端的唯一标识符生成一种随机颜色;在代码编辑窗口中,在值中的光标起始与终止位置之间填充所述颜色的高亮,并在光标起始与终止位置之间显示值中的用户名。
[0116] 本发明具体应用途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进,这些改进也应视为本发明的保护范围。

当前第1页 第1页 第2页 第3页
相关技术
协同编辑相关技术
实时代码相关技术
王楚豫发明人的其他相关专利技术