kizumi_header_banner_img

Learn. Build. Share.

加载中

文章导读

基于脚手架微服务的视频点播系统-客户端业务逻辑处理部分(三)-客户端主体部分完结


avatar
xiu114514 2025年11月9日 7
基于脚手架微服务的视频点播系统-客户端业务逻辑处理部分(三)-客户端主体部分完结

@TOC 本文结束后客户端的主体部分已全部完成,剩余的需要进行更正或添加的细节在服务端编写完毕后的联调才方便进行,客户端源码链接如下: ly121381-cpp-videoplayer

零.提示窗口

当用户需要进行一些比较敏感的操作时,我们需要为用户提供一个缓冲,再次确认用户是否需要进行此操作。比如退出登录,所以我们这里新增一个提示窗口,因为其构造较为简单,所以我们这里直接选择普通类即可,继承自QDialog:

效果如下: 提示窗口效果

一.登录界面逻辑处理

我们这里有两种登录方式,一种是在已经有账户的情况下可以直接进行账密登录。而另一种的登录方式则是验证码登录,有账号时直接登录,没有则进行注册。我们先来处理后一种情况。

1.1获取验证码

请求url:POST /HttpService/getCode 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
phoneNumberstring手机号

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
codeIdstring验证码ID

设计好请求与响应报文后,那就是走datacenter->netclient->mockserver->netclient->处理界面响应这套流程了:

客⼾端发起获取短信验证码请求:

1.2短信登录

请求URL:POST /HttpService/vcodeLogin 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
phoneNumberstring手机号
verifyCodestring验证码
codeIdstring验证码ID

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

先走老流程:

客户端发起短信登录请求并对成功与失败进行相关处理:

记得进行对应按钮与信号槽的链接。

1.3密码登录

在密码登录页面时,如果用户已经注册则直接登录,如果⽤⼾没有注册则需要先注册,此时直接跳转到短信登录页面进行注册。

然后我们进行密码登录的处理。请求响应接口如下: 请求URL:POST /HttpService/passwdLogin 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
phoneNumberstring手机号
passwordstring登录密码

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

接下来走老流程:

客户端发起密码登录请求在按下对应按钮之后:

1.4session登录

因为每次登录之后如果用户退出程序了,下次登录还需要去手动输入账号密码进行登陆很麻烦,所以我们需要在用户进入程序时加载用户的账户信息从文件中(如果有的话),退出时将用户的信息保存到appdata下的对应文件夹下:

接下来根据我们自己程序的代码结构放到程序开始与结束时调用即可。 账户数据文件处理完毕了,当程序启动时,会⾃动加载session信息,然后完成session登录。 请求url:POST /HttpService/sessionLogin 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
isGuestboolean是否是临时用户
false-否;true-是

然后就是走老流程:

客户端发送并响应服务端的响应: //因为这部分需要修改之前的临时登录逻辑,所以我直接把启动页的代码全部展示出来:

到这里,我们的登录逻辑已经基本处理完毕了。那么就需要去处理下点赞,发送弹幕,是否显示系统管理界面,这部分比较简单,读者可根据自己的代码进行响应的修改。

1.5退出登录逻辑处理

假设用户已经登录成功,⽤⼾在播放平台上操作完毕后,可以点击"退出登录"按钮,退出当前登录状态。退出登录接口定义如下: 请求URL: POST /HttpService/logout 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
sessionIdstring新会话ID

然后就是走老流程:

客户端发出退出登录请求:

二.修改个人信息界面处理

2.1加载用户当前信息到修改界面

打开修改个人信息界面时,需要将当前的用户信息加载到界面中,因为用户的手机号属于隐私信息,所以我们还需要截取中间四位进行隐藏:

2.2修改密码

密码⽂本后的控件上提⽰,点击设置密码,点击设置密码后,弹出新的对话框专门来设置密码。 我们先来定义相关请求与响应接口: 请求URL: POST /HttpService/setPassword 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
passwordstring密码

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

然后就是走老流程:

客户端发送修改请求并响应到界面上:

因为用户修改密码可能会有多次,所以我们在修改页面关闭时再根据密码的输入情况看是否需要向服务端发送修改请求。

2.3修改昵称

请求URL: POST /HttpService/setNickname 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
nicknamestring用户昵称

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

走老流程:

界面发起请求并处理响应到界面上:

三.上传视频界面

3.1上传视频

在我的页面中,如果用户需要上传视频,可以先选择本地文件,然后我们的程序进行读取再上传至服务端,请求接口定义如下: 请求URL: POST /HttpService/uploadVideo?requestId=xxx&sessionId=xxx 请求参数:multipart/form-data

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
nicknamestring用户昵称

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

然后就是走老流程:

记得在假服务端构造相应的目录和添加初始假数据键值对映射。 接下来我们需要处理界面中的响应逻辑,没有上传成功时显示加载动画,上传成功之后显示成功标志:

3.2获取视频首帧图

在工程构建目录下有一个名为ffmpeg的exe的文件,ffmpeg自然不用多说,如果需要详细了解ffmpeg的读者可以自行进行搜索,我们这里就是简单使用下获取视频首帧图,思路为:在我们当前程序中新启一个进程,然后将该进程替换为ffmpeg,并在程序中输入相应指令完成视频首帧图的获取,保存在工程目录下,然后设置到上传视频界面的封面图上根据首诊图片路径,获取视频首诊图的方法设置在mpvplayer类中,为一个静态方法:

3.3上传视频封面图

这里我们可以复用之前上传头像的接口,但是这里有一个问题,如果我们直接去调用,那么返回的图像会被设置到头像区域。所以我们要在原来的上传图片的异步请求方法中新增一个参数来区分是上传头像还是上传视频封面图:

也就是凭借whichpage来区分是那个界面上传的图片,头像上传部分的修改不予展示,有需要的读者可以参考我文章开头提供的源码链接。 上传视频界面发起请求并处理响应:

当然如果用户需要修改封面图也需要进行对应的处理:

3.4获取视频总时长

这里的思路为,让mpv订阅duration事件,然后如果给定的渲染窗口为空,则禁用mpv的视频输出与音频输出接口。当使用mpv播放视频时,它的事件循环会收到一个总时长改变的事件,此时让其发送信号通知主界面程序去记录此总时长,即可成功获取用户上传视频总时长的信息:

在上传视频界面进行视频总时长的获取:

3.5上传视频描述信息

当用户选择提交按钮时,首先需要判断三个地方,视频文件是否已经上传至服务端,视频封面是否上传至服务端,视频总时长是否已经成功获取,一旦有一个没有完成,变弹出提示消息并禁止用户提交:

data.h中新增视频信息的结构:

接下来我们来设计服务端客户端的响应与请求接口: 请求URL:POST /HttpService/newVideo 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
videoInfoobject视频信息
videoFileIdstring视频文件ID
photoFileIdstring封面文件ID
durationinteger视频总时长
videoTypeinteger视频类型
videoTitlestring视频标题
videoDescstring视频简介
videoTagarray视频标签

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

走老流程:

视频上传成功需要清空上传视频界面原来的信息:

四.视频审核界面

4.1获取审核视频列表并更新到审核界面

先阐述下我们做这部分内容的思路,先在客户端添加响应的接口去进行视频列表的获取,然后当视频拉取下来之后,将视频更新到视频审核界面中,并让checkTableItem进行信息的填入与相应样式的修该,当然我们需要在datacenter中增加一个审核视频列表用来存储从服务端拉取下来的视频。 再说细节上的处理,因为我们的视频审核界面有两种视频获取方式,一种是根据用户id进行获取,一种是根据状态进行获取。我们的思路为,如果id不为空,按照用户id进行获取,如果id为空再看状态。有人要问了,那如果id与状态均不为空是否可以组合获取,不可以,因为懒不想实现~,需要添加这个功能读者可以自己设计套接口,我这里就偷下懒了。废话不多说,开始这部分的实现:

接下来审核视频界面进行对应的更新-同时根据获取的内容是否为第一页进行分页器的设置:

当视频更新到界面上时需要对相应的checkTableItem进行样式设置:

4.2审核界面视频播放支持

我们当时再播放视频界面处理时,是当获取到弹幕数据时才去进行视频播放。那我们这里视频一共有四种状态:待审核,已审核,已驳回,已下架。这四种情况只有一种情况是没有弹幕数据的,那就是待审核状态,也就是某个用户刚上传至服务端的视频。所以视频播放时,如果视频为待审核状态,那么就需要禁止其发送弹幕,点赞。而此时也肯定没有弹幕,所以当视频状态为待审核状态时直接跳过弹幕获取,以及禁止播放数的更新:

接下来让checktableitem的videoBtn点击之后可以进行视频的播放:

4.3状态视频列表的获取

请求url:POST /HttpService/statusVideoList 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
videoStatusinteger视频状态
pageIndexinteger页码
pageCountinteger每页条目数量

返回响应:200 OK 按时间排序

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
videoListarray视频列表
videoIdstring视频ID
userIdstring所属用户ID
userAvatarIdstring用户头像ID
nicknamestring所属用户名称
checkerIdstring审核者用户ID
checkerAvatarstring审核者用户头像ID
checkerNamestring审核者用户名称
videoFileIdstring视频文件ID
photoFileIdstring封面文件ID
likeCountinteger点赞数量
playCountinteger播放数量
videoSizeinteger视频大小
videoDescstring视频简介
videoTitlestring视频标题
videoDurationinteger视频时长
videoUpTimestring视频上传时间

然后就是老一套流程:

然后链接信号槽向界面中更新视频列表,在刚刚的getVideoList中的注释部分发起请求即可

4.4审核界面审核功能的支持

审核界面不支持审核功能,就像老婆饼里没有老婆一样,哎不对这个比喻好像不恰当。不管了反正就这个意思。我们接下来实现视频审核功能,那么一共需要有三套接口:视频审核请求,视频下架请求以及视频上架请求。三套请求接口设计如下: 审核视频: 请求URL:POST /HttpService/checkVideo 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
videoIdstring视频ID
checkResultboolean审核结果

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

视频上架: 请求URL:POST /HttpService/saleVideo 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
videoIdstring视频ID
checkResultboolean审核结果

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

视频下架: 请求URL:POST /HttpService/haltVideo 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
videoIdstring视频ID

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

对三者进行老一套流程处理即可:

接下来在checktableitem中进行相应的信号槽处理即可。就是在之前的checktableitem.cpp的注释部分加上请求即可。

五.管理员角色管理界面

5.0整体思路

先说下这部分的整体大致思路与限制要求,当我们点击查询时如果手机号不为空按照手机号进行获取,为空则按照状态进行获取。因为手机号是唯一的,所以这里第一种获取方式只会至多有一条数据。然后是编辑与新增操作当管理员点击新增操作之后因为是新增所以不需要任何改变,而后是编辑,则需要将对应条目的管理员的信息加载到编辑界面。但是这里有两个禁止:不允许编辑超管账号,不允许自己启用或禁用自己,同时还无法设置自己的身份为超级管理员。对于删除操作,普通管理员之间可以相互删除,但是不允许自己删除自己,也不允许删除超管账号

5.1定义管理员信息与管理员列表

在datacenter中增加AdminList*成员变量:

5.2角色管理界面主体逻辑实现

因为这部分与视频审核界面大有重合,所以我直接给出设计好的相关接口与供读者参考,大家可以先参考接口尝试实现下。不会了再参考我给出的实现代码详情可见我上传的源码部分。(实则是最后一部分懒了不想写了QAQ~)。

5.2.1通过手机号获取管理员信息

请求URL: POST /HttpService/getAdminByPhone 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
phoneNumberstring手机号

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
userInfoobject用户信息对象
userIdstring用户ID
nicknamestring用户昵称
roleTypeinteger角色类型
userStatusinteger用户状态
userMemostring用户备注信息
phoneNumberstring手机号

5.2.2 通过状态获取管理员信息

请求URL: POST /HttpService/getAdminListByStatus 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
pageIndexinteger页码
pageCountinteger每页条目数量
userStatusinteger用户状态

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
totalCountinteger总数量
userListarray用户信息数组
userIdstring用户ID
nicknamestring用户昵称
roleTypeinteger角色类型
phoneNumberstring手机号
userStatusinteger用户状态
userMemostring用户备注信息

5.2.3新增管理员

请求URL: POST /HttpService/newAdministrator 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
userInfoobject管理员信息
nicknamestring用户昵称
roleTypeinteger角色类型
userStatusinteger用户状态
userMemostring用户备注信息
phoneNumberstring手机号

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息
resultobject响应结果
userIdstring用户ID

5.2.4编辑管理员信息

请求URL: POST /HttpService/setAdministrator 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
userInfoobject管理员信息
userIdstring用户ID
nicknamestring用户昵称
userStatusinteger用户状态
userMemostring用户备注信息

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

5.2.5启用或禁用管理员

请求URL:POST /HttpService/setStatus 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
userIdstring用户ID
userStatusinteger用户状态
0-未知;1-启用;2-禁用

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

5.2.6删除管理员

请求URL:POST /HttpService/delAdministrator 请求参数

字段名称字段类型字段说明
requestIdstring请求ID
sessionIdstring客户端会话ID
userIdstring用户ID

返回响应:200 OK

响应参数

字段名称字段类型字段说明
requestIdstring请求ID
errorCodeinteger错误码;0-成功
errorMsgstring错误信息

六.补充

客户端的主题逻辑到这里就结束了,待服务端编写完毕我们再进行联调与漏洞的补充,所以大家编写下来如果出现问题可以参考后面的联调部分,慢慢来不要着急。



评论(已关闭)

评论已关闭

日历

2025 年 11 月
 123
45678910
11121314151617
18192021222324
25262728293031