正确执行方法messageReceived()(Netty)
问题描述:
如何解决这个写法messageReceived()
。
更确切地说,如何根据消息连接的客户端的内容来配置服务器的响应。正确执行方法messageReceived()(Netty)
String fromClientData ="";
String [] params;
User user;
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws IOException {
fromClientData = e.getMessage().toString();
params = fromClientData.split(";");
String idOrDemo = params[1];
if (params[0].equals("demo")) {
user = useService.getById(idOrDemo);
e.getChannel().write("demo;" + user.getId() + ";");
}
if (params[0].equals("site")) {
Integer id = Integer.parseInt(idOrDemo);
user = userService2.getById(id);
if (params[2].split(":")[0].equals("SOME")) {
//todo something
}
ctx.getChannel().write("SOME:" + str + ";");
} else {
user.setChannelUser(e.getChannel());
if (params[1].equals("updateCache")) {
sendUpdate();
}
else {
setClient();
}
}
} else {
Integer id = Integer.parseInt(idOrDemo);
user = userService.getById(id);
user.setChannelUser(e.getChannel());
if (params[1].equals("updateCache")) {
sendUpdate();
}
else {
setClient();
}
}
}
答
首先,经过
e.getChannel().write("demo;" + user.getId() + ";");
你需要做的:
e.getChannel().flush()
或更换,以e.getChannel().writeAndFlush("demo;" + user.getId() + ";");
二,拆分后,我建议,如果改变条件的:
if ("demo".equals(params[0])) { }
因为,如果params[0]
为空,您将有NullPointerException。
你能提供更多关于你需要的信息吗?并提供一个框架结构的例子? – HCarrasko