完善proto
在proto文件里新增登陆验证服务
1 | message LoginReq{ |
接下来是调用grpc命令生成新的pb文件覆盖原有的,并且也拷贝给StatusServer一份
我们完善登陆逻辑,先去StatusServer验证token是否合理,如果合理再从内存中寻找用户信息,如果没找到则从数据库加载一份。
1 | void LogicSystem::LoginHandler(shared_ptr<CSession> session, const short &msg_id, const string &msg_data) { |
StatusServer验证token
在StatusServer验证token之前,我们需要在StatusServer中的GetServer的服务里将token写入内存
1 | Status StatusServiceImpl::GetChatServer(ServerContext* context, const GetChatServerReq* request, GetChatServerRsp* reply) |
接下来我们实现登陆验证服务
1 | Status StatusServiceImpl::Login(ServerContext* context, const LoginReq* request, LoginRsp* reply) |
这样当GateServer访问StatusServer的Login服务做验证后,就可以将数据返回给QT前端了。
客户端处理登陆回包
QT 的客户端TcpMgr收到请求后要进行对应的逻辑处理。所以我们在TcpMgr的构造函数中调用initHandlers注册消息
1 | void TcpMgr::initHandlers() |
并且增加处理请求
1 | void TcpMgr::handleMsg(ReqId id, int len, QByteArray data) |
用户管理
为管理用户数据,需要创建一个UserMgr类,统一管理用户数据,我们这么声明
1 |
|
简单实现几个功能
1 |
|
详细和复杂的管理后续不断往这里补充就行了。
登陆界面
登陆界面响应TcpMgr返回的登陆请求,在其构造函数中添加
1 | //连接tcp管理者发出的登陆失败信号 |
并实现槽函数
1 | void LoginDialog::slot_login_failed(int err) |
到此完成了登陆的请求和响应,接下来要实现响应登陆成功后跳转到聊天界面。下一篇先实现聊天布局。