自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 软路由开启python-cgi

项目需要实现通过软路由开启连接限制,仅仅允许在系统中注册的设备连接到专用局域网,以保证会议中资料的安全性。在开发过程中,我们发现在服务端和软路由之间通过ssh建立的连接并不稳定,尤其是需要短时间在路由器执行大量指令时,因为需要使用字节流来进行命令命令的传输和执行命令的回显,对路由器的io性能提出了一定要求。当路由器处理的网络数据过多时进行大量命令的处理,很容易造成路由器假死的故障存在。其次ssh连接超时中断的问题也对于维持ssh长连接来实现功能造成了一定的阻碍。经过考察,笔者决定使用CGI来实现对路由器

2021-06-11 14:00:50 355 2

原创 主持人命令设计

之前使用了stomp设计了命令推送系统,现在需要将所有的需求设计出对应格式命令进行使用。主持人使用接口来发送命令:@RestController()@RequestMapping("host")public class HostController { @Autowired private HostService hostService; /** * @api {POST} /host/beginMeeting beginMeeting * @apiVe

2021-06-11 10:42:34 115 2

原创 使用iptables进行入站流量过滤

iptables

2021-06-11 10:36:13 521 2

原创 客户端投票缓存

本次更新是实现了客户端的投票缓存机制。首先对于单次会议的多个投票都需要保持一个投票的状态来保证业务的正常进行。客户端使用一个有限状态机来管理投票的进程,对应的,后端服务也应该对应的保存状态。根据业务逻辑,投票状态只在会议进行期间有效,所以并没有写入数据库进行持久化的需求。因此使用内存作为缓存是更好的选择,一来能够保证数据库内部数据的语义,二来也能凭借内存的存取速度实现更好的性能表现。首先使用HashMap作为缓存,并加入dao层,这样使得缓存在项目层级中作为数据源的层级存在,不会破坏项目层级,保持了

2021-06-11 10:32:31 1100 1

原创 程序功能完善

程序功能完善投票功能完善​ 页面跳转逻辑投票功能变更​ 对于非主持人角色,初始状态下将不显示任何投票,仅当主持人开启投票后这个投票才对其它角色可见,且正在进行的投票会排在已经结束的投票的上方结束会议功能变更​ 主持人可以结束会议,当主持人结束会议后其它所有设备同步退出程序程序起始页添加​ 程序启动后需要执行相对较多的网络连接来进行准备,为了给用户良好的反馈,在显示会议信息之前添加了一个等待页面健壮性提升​ 客户端在会议中可能因为一些意外因素如电量不足导致程序中途退出,为了保证客户端中途

2021-06-10 19:07:39 74

原创 客户端数据清理

客户端数据清理需求当程序退出后,需要清除会议相关的持久化信息然后退出实现方案由于当程序退出时需要执行操作的位置在代码中相对分散,且程序退出情况也不止一种,于是我写了一个简易的Publisher-Subscriber系统,将产生退出行为的对象与需要在退出前执行一些操作的对象解耦,提高了代码的可维护性。相关代码namespace pm_client.util { public class MessagePublisher { public const string CLOSE

2021-06-10 19:03:04 92

原创 PDF手势缩放

PDF手势缩放需求实现pdf页面双指放大效果主要问题原本这个问题可以简单地通过wpf的manipulate相关事件来实现,但是开启此事件的拦截会导致已有的pdf第三方库失效。实现方案通过采集更原始的TouchMove事件实现自己的手势判断逻辑。具体来讲,​ 两个以上触摸点存在时,任意一个触摸点的远离将导致pdf放大,靠近将导致pdf缩小。​ 距离的计算为计算最近更新的两个触摸点的距离,当距离变化累计超过一个阈值时计算一次缩放倍率。实现代码private void zoom(object

2021-06-10 19:01:03 338

原创 STOMP 客户端开发

STOMP 客户端开发需求客户端需要彼此通信,如主持人需要能够控制所有客户端的第三方应用开启权限主要问题目前的c/s模型中是客户端主动连接服务器,客户端发出请求,服务器给出响应,缺少信息主动从服务器流向客户端的流程。可选方案在客户端上开启服务器接收主动连接请求,如基于TCP的服务器、基于HTTP的服务器等。主要问题是在客户端上再监听一个端口看起来非常冗余。轮询,客户端定时向服务器查询是否有信息更新。主要问题是这会产生非常多无意义的查询,如果客户端足够多也会对服务器造成负担。保证对每

2021-06-10 19:00:04 415

原创 服务端角色管理

需求在服务端

2021-06-09 10:32:58 66

原创 服务端文件上传

需求服务端在创建会议时需要上传文件以备开会使用,同样用springboot实现实现首先先创建所需的实体类FileDOpublic class FileDO { int uid; String name; String address; int meetingId; public FileDO() { } public FileDO(String name, String address,int meetingId) { thi

2021-06-09 09:59:48 114

原创 服务端会议创建

需求在服务端需要有创建会议这个功能,用springboot实现实现首先编写所需的实体类 MeetingDO MeetingVO。再编写meetingcontroller接受请求,创建会议@Autowired private MeetingService meetingService; @RequestMapping(value = "create", method = RequestMethod.POST) Msg createMeeting(@RequestPa

2021-06-09 09:59:38 131

原创 管理端-设备管理

本文是关于无纸化会议系统管理端设备管理的介绍,本界面使用html+css+js进行开发,使用Vue框架和ElementUI进行辅助开发。会议开始之前,管理员需要将会议设备添加到系统中,只有添加到系统中的设备才能参加会议。当我们打开设备管理网页时,首先会显示当前已经在系统中注册过的设备的信息,这些设备的信息是从服务器中获取的,部分实现代码如下所示:created : function () { //获取所有设备列表 var url = website + "/devic

2021-06-03 21:52:01 210

原创 客户端-自定义提示框

在无纸化会议系统客户端的使用过程中,需要使用提示框来进行提示,由于原生的MessageBox太过简陋,缺乏美观,所以我们需要自定义一个提示框来进行信息的提示,自定义的提示框实例如下图所示:自定义的MessageBox由四部分组成,最上面是标题栏,中间左边是提示框的图标(有好几种,可以自己选择,也可以不选择图标),中间右边是提示信息,最下面是按钮,按钮也分好几种,有确定,取消,是,否,或者是无。前端部分代码如下所示:<Border Grid.Row="0" Background="#EF4045"

2021-06-01 21:13:46 118

原创 服务端页面设计二

服务端页面设计服务端页面设计设备管理和会议记录部分会议记录但管理员创建会议后,会在会议记录列表中出现会议信息,管理员可以通过下面的页面选择一个会议准备开始,当点击准备按钮时,选中会议就是下一场要开始的会议,就会转到下一个页面。当会议处于这个状态时,在客户端的pad上会出现选中会议的信息,同时主持人可决定是否开始会议。此页面可替换下一场即将开始的会议。当客户端主持人开始会议后,会议状态便会如下页面变成会议正在进行,这时参会者仍可进入会议。设备管理设备列表...

2021-06-01 14:26:58 130

原创 管理端-会议记录

本文是关于无纸化会议系统管理端会议记录的操作,本界面使用html+css+js进行开发,使用Vue框架和ElementUI进行辅助开发。管理员可以使用本网页查询会议记录并对会议进行操作,如将会议状态从未开始切换为即将开始,或者把即将开始的会议改为另一个会议。网页分为两个部分,上方的显示条和下方的会议列表,上方的显示条显示的是即将开始的会议和正在进行中的会议,如果有即将开始的会议或者正在进行的会议,在显示条上就会显示有即将开始的会议或者正在进行的会议,如果既没有即将开始的会议,又没有正在进行的会议,那么就会

2021-06-01 00:56:07 208

原创 管理端-角色设置

本文是关于无纸化会议系统管理端角色设置的操作,本界面使用html+css+js进行开发,使用Vue框架和ElementUI进行辅助开发。管理员上传完文件之后,进入到角色设置界面,角色设置界面主要是给参加会议的每个角色设置文件权限以及分配会议设备,初始界面如下图所示:从上图可以看出,在文件列表中可以看到上一步上传的文件,这里的文件列表中的文件是根据当前会议从服务器中获取的,初始状态下将每个角色对所有文件的权限设置为可见,将每个角色的设备列表设置为空,获取已上传的文件列表,并进行变量的初始化的部分代码如下所

2021-05-31 23:22:41 394

原创 管理端-上传文件和删除文件

本文是关于无纸化会议系统管理端上传文件的操作,本界面使用html+css+js进行开发,使用Vue框架和ElementUI进行辅助开发。管理员创建完投票之后,进入到上传文件界面,初始界面如下图所示:点击选择文件,会弹出文件选择框:管理员选择上传的文件之后,文件名会显示在选择文件按钮的右侧,如下图所示:点击上传按钮,该文件就会显示在下方的文件列表中,文件列表中会显示文件的文件名,文件类型,文件大小,文件上传时间,还有一个删除按钮:同时,前端会使用ajax将该文件上传到服务器上,部分代码如下所示

2021-05-31 22:34:12 589

原创 管理端-创建投票

本文是关于无纸化会议系统管理端创建投票的操作,本界面使用html+css+js进行开发,使用Vue框架和Element-UI进行辅助开发。管理员填好会议的基本信息后,进入到此页面开始创建会议期间用到的投票,初始时投票页面如下所示:初始时没有投票,所以投票列表中显示暂无数据,我们可以点击上方的创建投票来进行投票的创建,点击创建投票后,会弹出一个对话框,管理员需要将投票的信息填入对话框中,如下图所示:点击添加选项可以添加投票选项,所有信息填完之后界面如下所示:点击确定,投票创建完成,投票列表会显示出

2021-05-31 21:51:45 152

原创 投票创建

需求在开会前需要在服务端创建投票,用springboot实现实现首先创建VoteController处理请求,并使用VoteService处理@RestController()@RequestMapping("vote")public class VoteController { @Autowired private VoteService voteService; @PostMapping("getVoteList") Msg getVoteList(@Request

2021-04-22 09:09:26 80

原创 无纸化会议-数据绑定和网络连接

无纸化会议-数据绑定和网络连接数据绑定和网络连接功能基本完成,现在客户端可以通过网络请求同步服务器数据了。界面中硬编码的文字,比如标题和时钟,已经替换成了实时更新的数据,根据后端提供的http接口文档编写了对应的数据类,实现了网络请求功能。http请求实现方案客户端http请求使用RestSharp库实现,使用Newtonsoft.Json库实现json的编解码关键代码举例public static string post(string rootPath,Dictionary<string

2021-04-22 08:12:14 226

原创 服务端前端实现

服务端的主要功能是创建会议并设置会议的相关数据(如会议信息,投票,文件,与会人员权限设置),这一周我实现了服务端的前端,主要是一些界面以及界面之间的交互,使用的编译器是HBuilder,使用的是语言是html+css+js,并使用了vue框架。首先,当我们进入网站时会看到如下界面:然后,点击“创建会议”,进入“创建会议”界面:在这里我们需要填写会议名称,开始时间,结束时间,会议简介,填写完之后点击下一步,进入创建投票界面:然后,点击“创建投票”,弹出“创建投票”提示框:在这里需要填写投票主

2021-04-22 01:44:01 277

原创 权限管理

需求分析因为参加会议人身份的不同,所以每个所使用的文件也会不同。在管理员创建会议时需要让不同的人拥有不同的文件权限,并且还需要让多个人拥有一样的文件权限即多个人为一类人。这需要用springboot实现实现首先我想到的第一种方案是直接将设备与文件绑定在一起,但当真正需要创建一个会议时,会有很多个设备也会有很多个文件,这样一来想把二者直接绑定在一起就会十分麻烦,所以第一种方法被否决。于是就有了第二种想法,那便是将每一类人都给予一个不同的角色,而用这个角色来当桥梁链接设备和文件。首先绑定url@R

2021-04-21 23:30:19 57

原创 无纸化会议-UI修正记录

无纸化会议-UI修正记录主要工作对UI进行了大量的修改,完善了许多细节修复问题侧边栏代码重构,现在有了一个更好的界面效果和更简洁的代码实现修复了侧边栏设置按钮选中状态不与其他按钮互斥的问题调整了大量文字的缩进对齐调整了侧边栏、按钮、列表等多位置的背景颜色修复了程序退出卡顿的问题修复了按钮在触摸屏上的不正确表现完成了主界面布局的对齐添加了文件加载的动画提示添加了等待登录界面新的解决Image不能持有default和checked两种状态的方案创建一个数据类,持有default和ch

2021-04-21 22:35:19 129

原创 无纸化会议-禁止进程启动

无纸化会议-禁止进程启动需求实现禁止进程启动的功能可选方案轮询。每隔固定时间检查一次进程列表,比较出新出现的进程,然后将其kill。这种方法会消耗相对较多的计算资源,并且有响应延迟,且实现难度不低,故不采用dll注入向全局注入一个dll,当有新进程启动时,dll进行attach时会向无纸化会议系统发回启动进程的进程id,系统收到id后据此来实现kill这里选择这一种方案,相比于第一种方案,dll注入可以在进程启动时立即响应,没有延迟,不需要循环查找和比较,资源消耗相对较低,由于这使用了c

2021-04-21 21:28:46 89

原创 后台服务部署

面向客户端的服务完成之后尝试部署到一台全天开机的windows服务器上方便进行测试。服务器配置如下:在部署过程中遇到了没有公网IP导致的无法访问,最终使用frp配合云服务器的方式解决。最终结构如下图:实现首先从github下载frp在Windows上添加配置文件:启动服务同样的在服务器端,使用wget安装frp,这次配置frps,指明绑定的端口,运行frps服务端程序,可以看到服务器正常启动。经过测试服务可以使用域名在外网正常访问...

2021-04-21 16:13:12 282

原创 使用Springboot处理文件上传功能

需求管理员需要在会议创建阶段上传文件,这一动作需要在管理员专用的网页上进行处理。管理员在进行所有动作之前必须经过口令的验证。单独使用FTP来进行文件的上传将会打断后续的权限管理,所以需要使用SpringBoot实现此功能。实现在配置文件application.yml的spring下添加文件传输限制:文件上传使用了http的multipartFile进行传输,首先创建FileController处理请求,接收客户端上传的文件,并使用FileService处理上传。@RestController@

2021-04-21 15:35:05 147

原创 基于Stomp协议的时间通知机制

问题导入系统运行过程中出现了由主持人的操作推动会议流程的场景,如何将主持人的命令通过服务器同步到每个人的设备上?问题分析在当前的系统设计中使用了C/S架构,基本上所有的请求都是终端通过http协议向服务器提出的,而服务器没有办法向终端主动发送消息。备选方案终端开启端口监听,运行服务器主动发起连接终端轮询查询是否出现状态更新使用WebSocket建立长连接由于主持人的命令发送具有时间随机、数量少、要求相应速度等要求。耗费大量资源的轮询和终端监听方案被排除。具体实现WebSocket

2021-04-21 14:39:29 220

原创 服务器页面设计

服务器页面设计根据服务器端的需求与功能设计了服务器端的页面,主要为创建会议部分。初始页面服务器初始的页面创建会议点击创建会议出现的页面,在里面输入会议的基本信息,点击下一步会转到其他会议信息设置功能页面会议信息在以下的三个页面中,管理者分别可以创建角色,添加设备并为设备分配角色以及为每个角色设置权限。可点击撤销授权,授权按钮对每个角色的设置文件权限点击新角色可创建新角色点击添加设备投票功能创建投票功能,在以下的两个页面管理者可创建投票并对其进行管理点击创建投票则,可在其

2021-04-20 23:19:17 300

原创 无纸化会议-PDF阅读器

这一周,我完成了PDF阅读器的编写,PDF阅读器的功能有打开PDF文件,浏览PDF文件,滑动,显示当前页数和总页数,跳转到首页,跳转到上一页,跳转到下一页,跳转到最后一页,放大,缩小,单页显示,双页显示,整页显示等功能。首先,打开文件选项,在右侧的文件列表中会看到一个PDF文件,如下图所示:然后,点击“PDFTest.pdf”文件,就会显示这个PDF文件,如下图所示:在右侧我们可以看到该PDF文件,触摸屏幕上下滑动可以使PDF文件上下滑动,左上角可以显示当前页数和总页数,点击上方的按钮可以实现相应

2021-04-12 00:28:56 273

原创 无纸化会议-数字键盘+笔记(画板)+视频播放器

这一周,我主要完成了数字键盘(用于退出时输入密码),笔记(和画板类似,区别是笔记不用共享,而画板需要共享),以及视频播放器,有的功能还不够完善,以后会继续完善。文章目录一、数字键盘二、笔记(画板)三、视频播放器总结一、数字键盘上周的时候本来想使用windows平板自带的触摸键盘,然后将某些组合键去掉(为了防止用户违规退出程序),开始的时候我使用了hook的方法来禁用组合键,但windows平板自带的触摸键盘上有一个按钮可以打开设置,进而通过设置退出程序或进行其他不允许的操作,而且这个按钮是没法禁用的

2021-03-30 00:28:46 226

原创 无纸化会议-安全初步

无纸化会议-安全初步这一周,我主要学习了C#和WPF的使用,内容比较多,C#我已经学完了,WPF学了一大半,还没完全学完,由于考虑到时间问题,我决定边学习边开始项目的进展。我这一周主要做的是关于安全方面的问题,因为要求不能退出程序,所以有些功能必须ban掉,比如手势,平板上的Win键,键盘上的win键,还有一些组合键(比如Alt+F4,Ctrl+Alt+Delete等),这些都可能会导致程序退出,所以必须ban掉;再就是需要禁止截屏,在Windows平板上有几种截屏方式,这个后面会介绍,我们需要一一ba

2021-03-22 01:47:01 243

原创 终端原型设计

本周进行了终端的需求分析和视觉稿绘制。无纸化会务系统在终端的业务逻辑较少,主要集中在文件展示和投票上。同时,基于终端可以使用手写笔进行输入的特性,终端加入了会议笔记功能来代替传统会议的草稿纸来记录会议内容。下面将详细叙述各个功能的交互逻辑。会议信息在会议正式开始之前,终端会显示一个会议信息页面用于显示会议相关信息,同时主持人有权决定何时正式开始会议。文件浏览文件浏览是本系统的核心功能之一,文件浏览功能支持pdf文档和mp4视频两种会议常见格式。服务器会根据会前管理员设置的权限将文件提前发送到对应

2021-03-21 19:34:58 195

原创 数据库设计和建立

数据库的初步建立经过几版的改进,数据库已经初步建立,以下为简述:需求分析管理员创建一个会议,在这个会议里可以设置多个角色,比如主持人、参会者类型一、类型二等,然后使不同的角色对应不同的文件。在这个会议里一个平板对应一个角色。管理员可创建投票,一个平板在一次投票中投出一个或多个选项。本次设计使用了角色和设备分离的机制来进行权限控制,会议相关文件不和设备直接关联,提高了系统使用的灵活性,管理员可以指定任意一台设备作为主持人、也可以随意调整角色的权限,通过角色和设备的管理实现权限批量调整。数据字典实

2021-03-21 14:24:23 255

原创 无纸化会议系统开发记录 20210320

无纸化会议系统开发记录 20210320过去一周主要完成了c# 入门学习,wpf入门学习,以及客户端界面的业务逻辑无关的部分的开发工作。界面展示部分需求细节、遇到问题和解决方案界面要有回退功能,如主持人角色可以完成如下路径:会议投票列表->投票内容详情页->发起投票后查看投票结果页->选择支投票情况详情页,这一过程应该支持回退,当切换到其他功能,如文件浏览后再切换回选择功能时,之前的页面状态应当被保留解决方案是维护一个<功能名,栈>映射字典,每

2021-03-20 20:53:01 216

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除