11.2.5 自定义聊天室
1 消息格式
web客户端通过webscoekt发送消息给服务端创建房间。
1.1 客户端->服务端 请求
{"type":"clientCreateRoom","payload":{"roomName":"老周讲golang"}}
1.2 服务端->客户端 响应
{"payload":{"roomId":"1cafd0d6-eb78-11ef-a73b-9b53f2a53745",
"roomNmae":"ros2"},"type":"serverCreateRoom"}
1.3 数据库设计
CREATE TABLE IF NOT EXISTS room_info (room_id VARCHAR(64) NOT NULL PRIMARY KEY,room_name VARCHAR(255) NOT NULL,creator_id BIGINT NOT NULL,create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_creator (creator_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2 服务端处理
2.1 api_room.h/api_room.cc
新增api_room.h api_room.cc
bool ApiCreateRoom(const std::string& room_id,const std::string& room_name,int creator_id,std::string& error_msg);bool ApiGetRoomInfo(const std::string& room_id,std::string& room_name,int& creator_id,std::string& create_time,std::string& update_time,std::string& error_msg);// 新增:获取所有聊天室列表
bool ApiGetAllRooms(std::vector<Room>& rooms,std::string& error_msg,const std::string& order_by = "create_time DESC");
2.2 websocket_conn.h/websocket_conn.cc
新增处理函数
int handleClientCreateRoom(Json::Value &root);
房间标识 roomId,使用uuid表示,复用api_common.h的 std::string generateUUID() 。
bool PubSubService::AddRoom(const Room& room); 将新房间加入房间列表std::vector<Room> &PubSubService::GetRoomList() ;可以获取房间列表
参考链接:0voice · GitHub