问题描述
我有一个正在构建的应用程序,其中一个用户(称为admin)在大多数用户中拥有一个通道。我的理解是,无论我是谁(管理员或用户)先创建一个聊天室,当我创建一个聊天室时,将只有一个频道存在。我的问题是,当我添加一个用户并在一个聊天中建立一个新用户时,其他频道也在我的频道列表中被复制。要么,要么有时根本根本无法连接频道,而用户却无法聊天。我使用的代码/伪代码如下,有人知道如何使用流创建多个一对一的聊天,或者为什么某些频道可能两次连接?
P.S。我正在编辑代码以将其简化为仅在堆栈溢出时位于此处的相关部分,因此请忽略下面的任何简单语法错误。谢谢!
setupUserChats = async (chatClient) => {
let { currentUser,participants } = this.props;
if (the current user is an admin) {
for (let i = 0; i < participants.length; i++) {
let participant = participants[i];
if (if the participant is a user) {
let conversation = await chatClient.channel('messaging',{
name: participant.name,members: [`${currentUser.participant_id}`,`${participant.participant_id}`]
});
await conversation.watch();
}
}
}
if (currentUser is a user) {
for (let i = 0; i < participants.length; i++) {
let participant = participants[i];
if (participant is an admin) {
let conversation = await chatClient.channel('messaging',{
name: currentUser.name,`${participant.participant_id}`]
});
await conversation.watch();
}
}
}
this.setState({ chatClient: chatClient });
}
我调用另一个函数(下面概述)来设置基本聊天,然后在下一个函数内部调用上面的代码:
setupChat = async () => {
let { currentUser,participants } = this.props;
let chatClient = await new StreamChat(process.env.REACT_APP_STREAM_API_KEY);
let serverResult = await getStreamToken(currentUser.participant_id);
let userToken = serverResult.token;
await chatClient.setUser(
{
id: currentUser.participant_id,name: currentUser.name,},userToken,);
const moderatorToAdmin = await chatClient.channel('messaging',`conference-ID`,{
name: "moderator-chat"
});
await moderatorToAdmin.watch();
this.setupUserChats(chatClient);
moderatorToAdmin.addMembers([`${currentUser.participant_id}`]);
this.setState({ chatClient: chatClient });
};
然后将其全部呈现在这里:
render() {
const { currentUser } = this.props;
const filters = { members: { $in: [currentUser.participant_id] } }
return (
<div>
<Chat client={this.state.chatClient} theme={'messaging light'} >
<div className="title">Chat</div>
<ChannelList
filters={filters}
Preview={MyChannelPreview}
/>
<Channel Message={MyMessageComponent} >
<Window>
<MessageList />
<MessageInput />
</Window>
<Thread />
</Channel>
</Chat>
</div>
);
}
class MyChannelPreview extends React.Component {
render() {
const { setActiveChannel,channel } = this.props;
return (
<div className={`channel_preview` + currentChannelClass}>
<a href="#" onClick={(e) => setActiveChannel(channel,e)}>
{channel._data.name || channel.data.name}
</a>
</div>
);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)