Netty 4.0.30.Final channel write issue

时间:2015-11-18 06:57:19

标签: java netty

我编写了一个编码器来编码我在线上发送的消息。在我的处理程序中,我发出了ctx.writeAndFlush()方法,但似乎没有任何东西写入远程端点。这些是我的代码片段:

编码

3

发送消息的代码

@ChannelHandler.Sharable
public class FreeSwitchEncoder extends MessageToByteEncoder<BaseCommand> {

    /**
     * Logger property
     */
    private final Logger _log = LoggerFactory.getLogger(this.getClass());
    /**
     * Character set delimiting the end of each FreeSwitch message parts
     */
    private final String MESSAGE_END_STRING = "\n\n";
    private final Charset _encoding = StandardCharsets.UTF_8;

    @Override
    protected void encode(ChannelHandlerContext ctx, BaseCommand msg, ByteBuf out) throws Exception {

        // Get the string representation of the BaseCommand
        String toSend = msg.toString().trim();

        // Let us check whether the command ends with \n\n
        if (!StringUtils.isEmpty(toSend)) {
            if (!toSend.endsWith(MESSAGE_END_STRING)) toSend = toSend + MESSAGE_END_STRING;
            _log.debug("Encoded message sent [{}]", toSend);

            ByteBuf encoded = Unpooled.copiedBuffer(toSend.getBytes());
           // encoded = encoded.capacity(encoded.readableBytes());
            out.writeBytes(encoded);
        }
    }
}

我不知道我做错了什么。代码挂在写入线上。请协助。这是日志:

public FreeSwitchMessage sendCommand(ChannelHandlerContext ctx,
                                     final BaseCommand command) {
    ManuelResetEvent manuelResetEvent = new ManuelResetEvent();
    syncLock.lock();
    try {
        manuelResetEvents.add(manuelResetEvent);
        _log.debug("Command sent to freeSwitch [{}]", command.toString());
       ChannelFuture future = ctx.writeAndFlush(command);
        future.addListener(new ChannelFutureListener() {
            public void operationComplete(ChannelFuture future) throws Exception {
                if(!future.isSuccess()){
                    future.cause().printStackTrace();
                }
            }
        });
    } finally {
        syncLock.unlock();
    }

    // Block until the response is available
    return manuelResetEvent.get();
}

0 个答案:

没有答案