CIYACA Is Yet Another Chat APP!
CIYACA 是为北京理工大学《2020年春季Linux 系统编程》大作业而开发的聊天+ BBS 软件, 包括服务端和客户端,均采用 C/CPP 实现。
探索本项目的在线文档(为 PDF 文档的在线版本,实际上 PDF 版本效果更加) »
报告Bug
·
提出新特性
- Ubuntu 18.04
- g++ 7.5.0
- make 4.1
- qt 5.14.0
- MySQL Ver 14.14 Distrib 5.7.30
- msgpack 3.2.1
git clone https://github.com/ciyaca/ciyaca.git或者下载压缩包
首先编译运行server,然后再启动客户端。
- 安装并运行 MySQL
- 在项目根目录中使用
make all命令,所有源码会被编译,得到的 server 主程序的可执行文件置于bin/server - 对于
sql/ciyacaSQL.sql,在MySQL里创建一个名为ciyacaSQL的数据库,并使用source命令将其导入 - 在数据库导入完毕后,将
sql/sql.cpp中的mysql_real_connect函数连接参数填写正确(MySQL 登录账户、登录口令、端口、数据库名等) - 执行
bin/server即可启动服务端程序
- 下载Qt 5.14.0
- 安装时选择全部组件
- 使用qt打开工程,选择
client/serc/test.pro进行加载 - 运行即可
- 安装msgpack
请访问https://github.com/msgpack/msgpack-c/tree/cpp_master自行编译安装 - 安装qt5.14.0
- 安装mysql 5.7.30
- 依据server说明配置数据库
..
├── client
│ └── src
│ ├── addfriend.cpp//添加好友
│ ├── bbsnewpostdialog.cpp//bbs发帖
│ ├── bbspostlistwidget.cpp//bbs帖子显示结构
│ ├── BBSPostReceiver.cpp//收贴
│ ├── chatface.cpp//聊天
│ ├── chatmessage.cpp//聊天信息
│ ├── chatmessage.h
│ ├── client.cpp//登录
│ ├── client.h
│ ├── come_message.cpp//来信
│ ├── come_message.h
│ ├── common.cpp//通用数据结构
│ ├── common.h
│ ├── contactitem.cpp//联系人
│ ├── contactitem.h
│ ├── controller.cpp//主控函数
│ ├── controller.h
│ ├── creategroup.cpp//创建群组
│ ├── emoji.cpp//emoji表情
│ ├── emojiwidget.cpp//显示emoji的框
│ ├── feverrpc//底层通信rpc模块
│ │ ├── feverrpc-client.cpp
│ │ ├── feverrpc-client.hpp
| | |.....
│ ├── friendrequest.cpp//好友请求
│ ├── main.cpp
│ ├── mainwindow.cpp//主界面
│ ├── mainwindow.h
├── images
│ └── logo.png
├── LICENSE
├── README.md
└── server
├── account.cpp // 账户、群组、好友管理
├── account.hpp
├── bbs.cpp // bbs服务、云文件实现
├── bbs.hpp
├── im.cpp //单聊、群聊、历史消息实现
├── im.hpp
├── makefile
├── net_disk //云文件的存储目录
│ ├── addfriend.cpp
│ ├── addfriend.o
│ ├── outTestFile.txt
│ └── Screenshot from 2020-05-27 19-07-21.png
├── README.md
├── server_main.cpp //主程序
├── sql
│ ├── ciyacaSQL.sql //数据库文件
│ ├── sql.cpp //数据库初始化与访问实现
│ └── sql.hpp
└── test //功能测试程序
├── file.txt
├── testCiyacaSQL
├── testCiyacaSQL.cpp
├── testFileTransmit
└── testFileTransmit.cpp| 功能名称 | 功能介绍 |
|---|---|
| 联系人树状显示 | 将所有联系人按照好友与群组分成两类以树状结构进行呈现。 |
| 好友请求处理 | 主要用于处理好友申请,选择同意或拒绝,并与服务器完成信息交互后删除该请求。 |
| 单聊 | 进行单人聊天。 |
| 历史消息 | 登录后,服务端会将历史消息发送至客户端,客户端重新渲染聊天记录。 |
| 表情包发送 | 可发送动态表情包。 |
| 文件发送 | 可发送图片等文件,发送时聊天界面中间有进度条显示进度。 |
| 添加好友/群组 | 输入好友名称或群组名称,服务器将返回处理结果,存在该用户则可发送好友请求。 |
| 创建群组 | 输入群组名称,服务器查询无重复即可创建群组。 |
| 群聊 | 进行群组聊天。 |
| BBS 发帖 | 可进行论坛聊天。 |
| BBS 评论 | 可进行论坛评论。 |
| BBS 文件上传 | 可以上传文件到论坛。 |
| BBS 文件下载 | 可以从论坛上下载文件。 |
- 专门设计了 Logo、名称
- 采用 Github 进行团队协作
- 采用 Sphinx + reStructuredText 进行文档写作
- 采用石墨文档进行共享编辑、整理前期内容
- 设计了美观的界面
- 有聊天气泡
- 使用了 RPC 的方式封装了底层通信,提供耦合度极低的双向调用方式
- 本项目使用 C++ 进行开发,使用 MySQL 数据库。
- 使用 Qt5 作为客户端
- msgpack
- libmysqlclient
| 姓名 | 学号 | 分工 |
|---|---|---|
| 董斌 | 1120173585 | 负责客户端界面的设计和客户端的开发工作,相关文档撰写 |
| 冯开宇 | 1120171224 | 负责网络通信框架FeverRPC-ng 的开发和维护,相关文档撰写和文档排版,以及项目计划的制定和督促工作 |
| 李昌昊 | 1120173304 | 李昌昊负责数据库的设计与建立,以及相关Mysql语句编写,相关文档撰写 |
| 王占坤 | 1120170124 | 负责部分客户端界面的开发和全部客户端接口的编写工作,相关文档撰写 |
| 张剑威 | 1120173586 | 张剑威负责后端接口的编写以及各个成员之间的协调工作,相关文档撰写 |
我们小组在项目开始通过小组会议的方式实现了对项目的大体分工。
在确定好分工后,会定期开展会议来分享大家的进度以及遇到的问题。同时,小组内部部分成员会不定期讨论来决定一些细节问题,比如接口设计问题,并通过及时沟通解决开发上遇到的冲突。我们项目实现了成员职责的明确界定,项目的每个部分都有对应的负责人。我们重视人际协调和沟通,每个人遇到问题,我们大家都会想办法一起解决。通过我们良好的人员合作,我们最终圆满完成了这个项目。
该项目使用Git进行版本管理。您可以在 repository 参看当前可用版本。
该项目签署了GPL-3.0 授权许可,详情请参阅 LICENSE.txt