我正在服务器上,并且正在使用DotNetty。服务器要做的是接收一条消息,检查它的标题,然后调用正确的消息事件。除一件事外,这一切都可行。
假设我有一个名为LoginMessageEvent
的消息事件。在这里,您要发送多个响应(=作曲家),例如登录结果和客户端详细信息。所以我的想法是拥有一个像这样的QueueComposer函数:
public Task QueueComposer(Composer composer)
{
return _channel.WriteAsync(composer);
}
具有以下冲洗功能:
public void Flush()
{
_channel.Flush();
}
(_ channel = IChannel)
所以在我的消息事件中,发送内容的部分是:
public async Task Handle(Session session, Event message)
{
Player player = await _playerController.Login(username, password);
if (player != null)
{
await session.QueueComposer(LoginResult.Compose(true));
await session.QueueComposer(ClientDetails.Compose(session));
session.Flush();
}
else
{
await session.Disconnect();
}
}
但是,这不会做任何事情。由于某些事件仅发送一个响应,因此我还有一个函数将调用WriteAndFlushAsync
,如下所示:
public async Task SendComposer(Composer composer)
{
await _channel.WriteAndFlushAsync(composer);
}
如果我要在if语句中更改代码:
await session.SendComposer(LoginResult.Compose(true));
await session.SendComposer(ClientDetails.Compose(session));
尽管我的想法是不理想的,所以我想知道为什么分开的QueueComposer
和Flush
无法正常工作。