Search in sources :

Example 6 with HttpFrame

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);
}
Also used : Cookie(com.firenio.codec.http11.Cookie) HashMap(java.util.HashMap)

Example 7 with HttpFrame

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);
}
Also used : IoEventHandle(com.firenio.component.IoEventHandle) Frame(com.firenio.component.Frame) ClientHttpFrame(com.firenio.codec.http11.ClientHttpFrame) WebSocketFrame(com.firenio.codec.http11.WebSocketFrame) WsUpgradeRequestFrame(com.firenio.codec.http11.WsUpgradeRequestFrame) HttpFrame(com.firenio.codec.http11.HttpFrame) HashMap(java.util.HashMap) Channel(com.firenio.component.Channel) ClientHttpFrame(com.firenio.codec.http11.ClientHttpFrame) HttpFrame(com.firenio.codec.http11.HttpFrame) LoggerChannelOpenListener(com.firenio.component.LoggerChannelOpenListener) WsUpgradeRequestFrame(com.firenio.codec.http11.WsUpgradeRequestFrame) ChannelConnector(com.firenio.component.ChannelConnector) ClientHttpCodec(com.firenio.codec.http11.ClientHttpCodec) WebSocketFrame(com.firenio.codec.http11.WebSocketFrame) ClientHttpFrame(com.firenio.codec.http11.ClientHttpFrame) NioEventLoopGroup(com.firenio.component.NioEventLoopGroup) WebSocketCodec(com.firenio.codec.http11.WebSocketCodec)

Example 8 with HttpFrame

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);
        }
    }
}
Also used : JSONObject(com.alibaba.fastjson.JSONObject) Channel(com.firenio.component.Channel) WebSocketFrame(com.firenio.codec.http11.WebSocketFrame) Client(sample.http11.service.WebSocketMsgAdapter.Client) HttpFrame(com.firenio.codec.http11.HttpFrame)

Example 9 with HttpFrame

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();
}
Also used : IoEventHandle(com.firenio.component.IoEventHandle) Frame(com.firenio.component.Frame) HttpFrame(com.firenio.codec.http11.HttpFrame) HttpCodec(com.firenio.codec.http11.HttpCodec) Channel(com.firenio.component.Channel) ChannelAcceptor(com.firenio.component.ChannelAcceptor) HttpFrame(com.firenio.codec.http11.HttpFrame) NioEventLoopGroup(com.firenio.component.NioEventLoopGroup) WebSocketCodec(com.firenio.codec.http11.WebSocketCodec) LoggerChannelOpenListener(com.firenio.component.LoggerChannelOpenListener)

Aggregations

HttpFrame (com.firenio.codec.http11.HttpFrame)8 Channel (com.firenio.component.Channel)5 Frame (com.firenio.component.Frame)4 IoEventHandle (com.firenio.component.IoEventHandle)4 WebSocketFrame (com.firenio.codec.http11.WebSocketFrame)3 ChannelAcceptor (com.firenio.component.ChannelAcceptor)3 LoggerChannelOpenListener (com.firenio.component.LoggerChannelOpenListener)3 NioEventLoopGroup (com.firenio.component.NioEventLoopGroup)3 JSONObject (com.alibaba.fastjson.JSONObject)2 ClientHttpCodec (com.firenio.codec.http11.ClientHttpCodec)2 ClientHttpFrame (com.firenio.codec.http11.ClientHttpFrame)2 HttpCodec (com.firenio.codec.http11.HttpCodec)2 WebSocketCodec (com.firenio.codec.http11.WebSocketCodec)2 ChannelConnector (com.firenio.component.ChannelConnector)2 HashMap (java.util.HashMap)2 ByteBuf (com.firenio.buffer.ByteBuf)1 Cookie (com.firenio.codec.http11.Cookie)1 HttpStatus (com.firenio.codec.http11.HttpStatus)1 WsUpgradeRequestFrame (com.firenio.codec.http11.WsUpgradeRequestFrame)1 ByteTree (com.firenio.collection.ByteTree)1