#pragma once #include #include #include #include //#include #include "data.h" #include "../network/netclient.h" namespace model { class DataCenter : public QObject { Q_OBJECT public: static DataCenter* getInstance(); ~DataCenter(); /// /// 计算两个整数的和。 /// /// 第一个加数 /// 第二个加数 /// 返回 a + b 的结果 /*int add(int a, int b) { return a + b; }*/ private: DataCenter(); static DataCenter* instance; //列出DataCenter中要组织管理的所有数据 //当前客户端登录到服务器对应的登录会话Id QString loginSessionId; //当前的用户信息 UserInfo* myself = nullptr; //好友列表 QList* friendList = nullptr; //会话列表 QList* chatSessionList = nullptr; //记录当前选中的会话是哪个 QString currentChatSessionId = ""; //记录每个会话中,都有哪些成员 QHash>* memberList = nullptr;//unordered_map //待处理的好友申请列表 QList* applyList = nullptr; //每个会话最近消息的列表,key为chatSessionId,value为消息列表 QHash>* recentMessages = nullptr; //存储每个会话,表示未读消息的数量 QHash* unreadMessageCount = nullptr; // 用户的好友搜索结果 QList* searchUserResult = nullptr; //保存一个历史消息搜索结果 QList* searchMessageResult = nullptr; //短信(邮箱)验证码的验证Id QString currentVerifyCodeId = ""; //让dataCenter持有Netclient实例 network::NetClient netClient; public: /// /// 初始化数据文件 /// void initDataFile(); //存储数据到文件中 void saveDataFile(); //从数据文件中加载数据到内存 void loadDataFile(); //清空未读消息数目 void clearUnread(const QString& chatSessionId); //增加未读消息的数目 void addUnread(const QString& chatSessionId); //获取未读消息的数目 int getUnread(const QString& chatSessionId); //获取到当前的登录会话Id const QString& getLoginSessionId() const{ return loginSessionId; } //验证网络的连通性 void ping() { netClient.ping(); } //通过网络获取到用户的个人信息 void getMyselfAsync(); UserInfo* getMyselfsync(); // void resetMyself(std::shared_ptr resp); //通过网络获取好友列表 QList* getFriendList(); void getFriendListAsync(); void resetFriendList(std::shared_ptr resp); //获取会话列表 QList* getChatSessionList(); void getChatSessionListAsync(); void resetChatSessionList(std::shared_ptr resp); //获取好友申请列表 QList* getApplyList(); void getApplyListAsync(); void resetApplyList(std::shared_ptr resp); //获取最近的消息列表 void getRecnetMessageListAsync(const QString& chatSessionId, bool updateUI); QList* getRecentMessageList(const QString& chatSessionId); void resetRecentMessageList(const QString& chatSessionId, std::shared_ptr resp); //发送消息给服务器 void sendTextMessageAsync(const QString& chatSessionId, const QString& content); //修改用户昵称 void changeNicknameAsync(const QString& nickname); void resetNickname(const QString& nickname); //修改用户签名 void changeDescriptionAsync(const QString& desc); void resetDescription(const QString& desc); //获取邮箱验证码 void getVerifyCodeAsync(const QString& email); void resetVerifyCodeId(const QString& verifyCodeId); //获取verifyCodeId const QString& getVerifyCodeId() const; //修改邮箱号码 void changePhoneAsync(const QString& email, const QString& verifyCodeId, const QString& verifyCode); void resetPhone(const QString& email); //修改头像 void changeAvatarAsync(const QByteArray& imageBytes); void resetAvatar(const QByteArray& avatar); /////////////////////////////////////////////////////////////////////////////////// ///辅助函数 /////////////////////////////////////////////////////////////////////////////// //根据会话id查询会话信息 ChatSessionInfo* findChatSessionById(const QString& chatSessionId); //根据用户ID查询会话信息 ChatSessionInfo* findChatSessionByUserId(const QString& userId); //把指定的会话信息,放到列表头部 void topCurrentChatSessionId(const ChatSessionInfo& chatSessionInfo); //根据用户id查询好友信息 UserInfo* findFriendById(const QString& userId); //设置/获取当前选中的会话 void setCurrentChatSessionId(const QString& chatSessionId); const QString& getCurrentSessionId(); //添加消息到DataCenter中 void addMessage(const Message& message); signals: //自定义信号 void getMyselfDone(); void getFriendListDone(); void getChatSessionListDone(); void getApplyListDone(); void getRecentMessageListDone(const QString& chatSessionId); void getRecentMessageListDoneNoUI(const QString& chatSessionId); void sendMessageDone(MessageType messageType, const QByteArray& content, const QString& extraInfo); void updateLastMessage(const QString& chatSessionId); void receiveMessageDone(const Message& lastMessage); void changeNicknameDone(); void changeDescriptionDone(); void getVerifyCodeDone(); void changePhoneDone(); void changeAvatarDone(); }; } //end namespace model