北京华夏安泰技术论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需要一步,快速开始

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 684|回复: 3

在线文档编辑客户端 Tink0.3.X

[复制链接]

12

主题

86

帖子

371

积分

内部工作人员

积分
371
发表于 2017-8-10 02:14:44 | 显示全部楼层 |阅读模式
本帖最后由 王健 于 2017-8-21 09:31 编辑

目的
通过客户端程序提供在线文档的本地编辑功能。
客户端(client)和服务器(server)、需要提供文档编辑服务的web系统(如内控系统),以下以C、S、W简称!

选型
C使用JavaFX编写
C与S通过基于Java NIO的Netty进行TCP连接交互
S与W除了上述交互方式,部分交互(如登陆)使用Http协议交互
使用JackRabbit提供文档管理和配置服务

流程
C和W的所有交互都通过S,暂无时间画图,仅文字描述如下:
  • 用户通过C登陆,C发送TCP登陆请求至S
  • S转发HTTP登陆请求至W
  • W验证登陆,返回登陆结果给S
  • S转发结果给C,同时如果登陆成功,使用该用户信息标记当前NIO通道
  • C接收S的登陆结果,如果登陆失败,C停留在登陆界面;否则,C进入主界面
  • 用户在W页面点击需要编辑的文档,页面发送请求至W后端服务
  • W后端与S建立临时 TCP连接
  • W首先发送请求验证当前登录W的用户是否已经登陆C
  • S搜索通道,返回结果给W
  • W接收结果,如果当前用户未登录C,无法进行文件传输和编辑,进入流程1.;否则,发送文件传输请求至S
  • S验证文件锁定状态,如果文件被锁定,不能进行文件传输和编辑
  • S接受文件传输请求,将该请求转发至C,同时关闭与W的临时连接(这里是因为目前版本是S直接去读取文件,不需要W进行文件内容的传输)
  • S将文件设置上锁标志(在当前版本未实现,由S还是W上锁哪个更合理还需考虑)
  • C响应文件传输请求,请求S建立临时的文件传输通道,并再次将文件传输请求转发回S以提示可以开始传输,同时将文件加入下载列表
  • S与C建立临时传输通道,开始传输文件
  • C读取文件内容,向本地文件系统中保存文件,并更新文件下载进度
  • 文件传输结束,C关闭与S的临时传输通道
  • C调用系统默认打开程序,打开传输完成的文件
  • 启动监视线程观察文件的更改状态,保存为本地JackRabbit文档(当前版本无此功能,另外有几个问题需要考虑:监视的频率;如果无法监控文件的关闭状态,监视线程什么时候停止;文档编辑状态的文件内容读取也还未验证等等)
  • 用户本地编辑文件
  • 当编辑完成,点击应用更改按钮,请求向S提交文件内容
  • S验证锁的当前用户身份,如果是由该用户锁定的文件,回执C接受请求
  • C与S建立临时传输通道,开始传输文件
  • S读取文件内容并保存
  • 文件传输结束,C关闭与S的临时传输通道
  • S释放文件锁,一个编辑流程结束。

项目访问
代码目前是使用的kotlin编写,仅使用了kotlin基础的语法;
当前代码是初级版本,以实现功能为主,并未进行设计(事实上代码很乱),之后会根据时间进行重构,重构后变化可能会很大;
所以现在访问的意义不太大,目前代码直接扔在oschina的git上了,下面仍提供一个公共账号访问
https://git.oschina.net/hamlet2015/tink
972605583@qq.com
20170316

后续计划
0.1.X 已完成功能Bug修改及功能完善
0.2.X 下述流程19.之后的功能(不包含监视线程和文档库管理)
0.3.X 代码重构及服务端GUI
0.4.X 文档库管理及监视线程
0.5.X 即时通讯
0.6.X 提供WEB内核访问BS系统
。。。
1.0之前所有已完成功能的完善和bug修复







回复

使用道具 举报

12

主题

86

帖子

371

积分

内部工作人员

积分
371
 楼主| 发表于 2017-8-15 10:02:20 | 显示全部楼层
本帖最后由 王健 于 2017-8-21 09:36 编辑

版本更新记录(倒序)

版本0.3.0
增加服务端GUI,可视化启动和部分设置等操作
服务端GUI代码重构,界面优化
io服务代码重构简化
客户端设置功能


版本0.2.0
修复和解决0.1.X的问题,部分功能调整
增加上述流程19-26的实现
文档库管理提前加入

版本0.1.6
实现了上述流程1.到18.的功能,19.之后未整合或未实现










回复

使用道具 举报

12

主题

86

帖子

371

积分

内部工作人员

积分
371
 楼主| 发表于 2017-8-21 09:43:25 | 显示全部楼层
本帖最后由 王健 于 2017-8-21 10:44 编辑

使用说明
#服务端GUI

*启动初始界面

  • 状态提示区只显示最近一条关键信息,详细运行信息需要查看日志(但目前程序打包后日志初始化有问题,后面解决)
  • 提示提供三种状态,分别为基本、成功、错误,图标分别为黄色、绿色、红色
  • 关闭按钮只关闭当前窗口并不退出程序,防止误操作!退出程序只能从系统托盘右键退出!
  • 设置按钮进行基本的服务配置


*进入配置界面
点击配置按钮弹出配置窗口

  • 文件服务独立于基础服务,所有各自使用各自的端口号;基础服务默认值9000,可选区间9000-9499;文件服务默认值9500,可选区间9500-9999
  • 最大连接数设置,在目前版本(0.3.X)中并未使用
  • Tink服务端并无用户数据,需要绑定的系统提供登陆验证服务,服务器将客户端登陆请求通过http post转发到该地址,该地址需要返回指定格式(Java Class)的结果数据

*配置保存



*服务启动中

  • 点击启动按钮后,隐藏启动按钮防止连续点击,并显示一个等待状态


*启动成功

  • 启动成功后,提示区显示成功状态;
  • 控制按钮替换为停止服务按钮


*启动失败或运行错误

  • 启动失败,重新显示启动按钮并提示错误
  • 失败原因比较常见的是端口占用


*停止服务

  • 点击停止服务按钮,服务停止
  • 按钮切换到启动按钮

*托盘图标

为方便本机测试,托盘图标专门使用了不同于客户端的图标

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册  

x
回复

使用道具 举报

12

主题

86

帖子

371

积分

内部工作人员

积分
371
 楼主| 发表于 2017-8-21 11:25:16 | 显示全部楼层
本帖最后由 王健 于 2017-8-21 11:29 编辑

#客户端
界面及说明

*登陆界面

  • 不同于服务端GUI,客户端窗口右上角的关闭按钮是真正退出,只有最小化按钮才是隐藏到托盘。这个之后可能会统一模式,或者提供可选配置
  • 设置按钮配置服务器连接参数(服务器ip和端口)等等


*启动错误

  • 因为某个特殊原因,目前的实现是在客户端程序启动时就建立与服务器的连接
  • 一般情况下,启动错误是服务器并没有启动服务或者连接配置(ip和端口)错误
  • 可以如图查看详细信息,显示的是一个java异常的堆栈信息


*登陆错误


*主界面

  • ‘登陆成功隐藏登陆窗口显示主界面
  • 主界面有些与文件编辑无关的预留功能暂未实现


*文件传输过程

  • 在绑定系统中的页面点击编辑
  • 客户端建立一个文件下载进度


*文件传输完成


  • 文件传输完成后,自动唤起本地程序打开文件
  • 目前并未测试在未安装对应软件的环境下的运行状态

*托盘图标




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册  

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则


小黑屋|手机版|Archiver|北京华夏安泰技术论坛  

GMT+8, 2019-1-21 11:56 , Processed in 0.093750 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表