use of com.firenio.codec.http11.HttpFrame in project baseio by generallycloud.
the class TestCookieHeaderServlet method doAccept.
@Override
protected void doAccept(Channel ch, HttpFrame frame) throws Exception {
String name = frame.getRequestParam("name");
String value = frame.getRequestParam("value");
if (Util.isNullOrBlank(name)) {
name = "test8";
}
if (Util.isNullOrBlank(value)) {
value = Util.randomUUID();
}
String cookieLine = frame.getRequestHeader(HttpHeader.Cookie);
Map<String, String> cookieMap = new HashMap<>();
if (cookieLine != null) {
CookieUtil.parseCookies(cookieMap, cookieLine);
}
String res = "yes server already accept your message :) " + frame.getRequestParams();
res += "<BR/>";
res += cookieMap.toString();
Cookie c = new Cookie(name, value);
c.setComment("comment");
c.setMaxAge(999999);
frame.setContentType(HttpContentType.text_html_utf8);
frame.setResponseHeader(HttpHeader.Set_Cookie, c.toString().getBytes());
frame.setContent(res.getBytes(ch.getCharset()));
ch.writeAndFlush(frame);
}
use of com.firenio.codec.http11.HttpFrame in project baseio by generallycloud.
the class TestSimpleWebSocketClient method main.
public static void main(String[] args) throws Exception {
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
if (frame instanceof ClientHttpFrame) {
ClientHttpFrame f = (ClientHttpFrame) frame;
if (f.updateWebSocketProtocol(ch)) {
WebSocketFrame f2 = new WebSocketFrame();
Map<String, String> map = new HashMap<>();
map.put("action", "add-user");
map.put("username", "火星人" + Util.randomUUID());
f2.setString(JSON.toJSONString(map), ch);
ch.writeAndFlush(f2);
}
System.out.println(f.getResponse_headers());
} else {
WebSocketFrame f = (WebSocketFrame) frame;
System.out.println(f.getStringContent());
}
}
};
String host = "firenio.com";
int port = 443;
NioEventLoopGroup g = new NioEventLoopGroup();
g.setEnableMemoryPool(false);
ChannelConnector context = new ChannelConnector(g, host, 443);
// context.setExecutorGroup(new ExecutorEventLoopGroup());
context.setIoEventHandle(eventHandleAdaptor);
context.addProtocolCodec(new ClientHttpCodec());
context.addProtocolCodec(new WebSocketCodec());
context.addChannelEventListener(new LoggerChannelOpenListener());
context.setSslContext(SslContextBuilder.forClient(true).build());
Channel ch = context.connect();
String url = "/web-socket-chat";
HttpFrame frame = new WsUpgradeRequestFrame(url);
frame.setRequestHeader(HttpHeader.Host, host + port);
frame.setRequestHeader(HttpHeader.Pragma, "no-cache");
frame.setRequestHeader(HttpHeader.Cache_Control, "no-cache");
frame.setRequestHeader(HttpHeader.User_Agent, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36");
frame.setRequestHeader(HttpHeader.Accept_Encoding, "gzip, deflate, sdch");
frame.setRequestHeader(HttpHeader.Accept_Language, "zh-CN,zh;q=0.8");
ch.writeAndFlush(frame);
Util.sleep(100);
WebSocketFrame f2 = new WebSocketFrame();
Map<String, String> map = new HashMap<>();
map.put("action", "new-message");
map.put("message", TestUtil.newString(1024 * 8));
f2.setString(JSON.toJSONString(map), ch);
ch.writeAndFlush(f2);
Util.sleep(999999999);
Util.close(context);
}
use of com.firenio.codec.http11.HttpFrame in project baseio by generallycloud.
the class TestWebSocketChatServlet method accept.
@Override
public void accept(Channel ch, Frame frame) throws Exception {
if (frame instanceof HttpFrame) {
((HttpFrame) frame).updateWebSocketProtocol(ch);
return;
}
WebSocketFrame f = (WebSocketFrame) frame;
// CLOSE
if (f.isCloseFrame()) {
Client client = msgAdapter.removeClient(ch);
if (client != null) {
JSONObject obj = new JSONObject();
obj.put("username", client.getUsername());
obj.put("numUsers", msgAdapter.getClientSize());
obj.put("action", "user-left");
String msg1 = obj.toJSONString();
msgAdapter.sendMsg(msg1);
}
ch.close();
} else {
String msg = f.getStringContent();
JSONObject obj = JSON.parseObject(msg);
String action = obj.getString("action");
if ("add-user".equals(action)) {
String username = obj.getString("username");
if (Util.isNullOrBlank(username)) {
return;
}
msgAdapter.addClient(username, ch);
obj.put("numUsers", msgAdapter.getClientSize());
obj.put("action", "login");
msgAdapter.sendMsg(ch, obj.toJSONString());
obj.put("username", username);
obj.put("action", "user-joined");
msgAdapter.sendMsg(obj.toJSONString());
obj.put("action", "new-message");
obj.put("username", "系统消息");
obj.put("message", "欢迎加入QQ群讨论java io相关技术:540637859,@某人可以单独向他发送消息。");
msgAdapter.sendMsg(ch, obj.toJSONString());
return;
}
Client client = msgAdapter.getClient(ch.getChannelId());
if (client == null) {
return;
}
String username = client.getUsername();
if ("new-message".equals(action)) {
String message = obj.getString("message");
if (message.charAt(0) == '@') {
int nIndex = message.indexOf(' ');
if (nIndex > 1) {
String to_username = message.substring(1, nIndex);
Channel s = msgAdapter.getChannel(to_username);
if (s == null) {
obj.put("message", "用户不存在或者已离线");
obj.put("username", username);
msgAdapter.sendMsg(ch, obj.toJSONString());
return;
}
obj.put("username", username);
msgAdapter.sendMsg(ch, obj.toJSONString());
obj.put("username", username + "@你");
obj.put("message", message.substring(nIndex));
msgAdapter.sendMsg(s, obj.toJSONString());
return;
}
}
obj.put("username", username);
String msg1 = obj.toJSONString();
msgAdapter.sendMsg(msg1);
} else if ("typing".equals(action)) {
obj.put("username", username);
String msg1 = obj.toJSONString();
msgAdapter.sendMsg(msg1);
} else if ("stop-typing".equals(action)) {
obj.put("username", username);
String msg1 = obj.toJSONString();
msgAdapter.sendMsg(msg1);
} else if ("disconnect".equals(action)) {
msgAdapter.removeClient(ch);
obj.put("username", username);
obj.put("numUsers", msgAdapter.getClientSize());
obj.put("action", "user-left");
String msg1 = obj.toJSONString();
msgAdapter.sendMsg(msg1);
} else {
f.write("no action matched:" + action, ch);
ch.writeAndFlush(f);
}
}
}
use of com.firenio.codec.http11.HttpFrame in project baseio by generallycloud.
the class TestHttpLoadServer method main.
public static void main(String[] args) throws Exception {
IoEventHandle eventHandle = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
HttpFrame f = (HttpFrame) frame;
f.setConnection(HttpConnection.KEEP_ALIVE);
f.setContentType(HttpContentType.text_plain);
f.setString("Hello World", ch);
ch.writeAndFlush(f);
ch.release(f);
}
};
NioEventLoopGroup group = new NioEventLoopGroup();
group.setMemoryCapacity(1024 * 1024 * 64);
group.setMemoryUnit(512);
group.setEventLoopSize(2);
ChannelAcceptor context = new ChannelAcceptor(group, 8080);
context.addProtocolCodec(new HttpCodec(8));
context.addProtocolCodec(new WebSocketCodec());
context.setIoEventHandle(eventHandle);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.bind();
}
Aggregations