点网WriteAsync不起作用,但WriteAndFlushAsync起作用

时间:2018-08-19 09:00:23

标签: c# networking

我正在服务器上,并且正在使用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));

尽管我的想法是不理想的,所以我想知道为什么分开的QueueComposerFlush无法正常工作。

0 个答案:

没有答案