Package io.undertow.websockets.core

Examples of io.undertow.websockets.core.StreamSourceFrameChannel


            maxSize = maxMessageSize(session, source.getType());
        }

        @Override
        public void handleEvent(StreamSourceChannel ch) {
            StreamSourceFrameChannel streamSourceFrameChannel = (StreamSourceFrameChannel) ch;
            switch (streamSourceFrameChannel.getType()) {
                case TEXT:
                case BINARY:
                case CONTINUATION:
                    boolean free = true;

                    if (!frameInProgress) {
                        header = new DefaultWebSocketFrameHeader(streamSourceFrameChannel.getType(), streamSourceFrameChannel.getRsv(), true);
                        frameInProgress = true;
                        size += streamSourceFrameChannel.getPayloadSize();

                        // this also match for TEXT frames
                        if (maxSize > 0 && size > maxSize) {
                            if (executeInIoThread) {
                                session.sendClose(new CloseReason(CloseReason.MSG_TOO_BIG, null), null);
                            } else {
                                session.getFrameHandlerExecutor().execute(new Runnable() {
                                    @Override
                                    public void run() {
                                        session.sendClose(new CloseReason(CloseReason.MSG_TOO_BIG, null), null);
                                    }
                                });
                            }
                            return;
                        }

                    }
                    try {
                        for (;;) {
                            ByteBuffer buffer = pooled.getResource();

                            int r = streamSourceFrameChannel.read(buffer);
                            if (r == 0) {
                                free = false;
                                streamSourceFrameChannel.resumeReads();
                                return;
                            }
                            if (r == -1) {
                                frameInProgress = false;
                                streamSourceFrameChannel.close();
                                streamSourceFrameChannel.getReadSetter().set(null);
                                buffer.flip();
                                if (pooledList != null) {
                                    pooledList.add(pooled);
                                }

                                if (streamSourceFrameChannel.isFinalFragment()) {
                                    session.getChannel().getReceiveSetter().set(delegateListener);

                                    // final fragement notify the handler now
                                    if (pooledList != null) {
                                        notifyHandler(session, handler, header, pooledList.toArray(new Pooled[0]));
                                        free = false;
                                    } else {
                                        notifyHandler(session, handler, header, pooled);
                                        free = false;
                                    }
                                } else {
                                    // not the final fragement keep buffer the payload
                                    session.getChannel().getReceiveSetter().set(new ChannelListener<WebSocketChannel>() {
                                        @Override
                                        public void handleEvent(WebSocketChannel webSocketChannel) {
                                            boolean free = true;
                                            try {
                                                StreamSourceFrameChannel frame = webSocketChannel.receive();
                                                if (frame != null) {
                                                    frame.getReadSetter().set(AssembleFrameChannelListener.this);
                                                    // wake up reads to trigger a read operation now
                                                    // TODO: Think about if this a really good idea
                                                    frame.wakeupReads();
                                                } else {
                                                    webSocketChannel.resumeReceives();
                                                }
                                                free = false;
                                            } catch (IOException e) {
View Full Code Here


        private int framePayloadLen1;
        private boolean done = false;

        @Override
        public StreamSourceFrameChannel getChannel(Pooled<ByteBuffer> pooled) {
            StreamSourceFrameChannel channel = createChannel(pooled);
            if (frameFinalFlag) {
                channel.finalFrame();
            } else {
                fragmentedChannel = channel;
            }
            return channel;
        }
View Full Code Here

        }

        @Override
        public AbstractFramedStreamSourceChannel<?, ?, ?> getExistingChannel() {
            if (frameOpcode == OPCODE_CONT) {
                StreamSourceFrameChannel ret = fragmentedChannel;
                if(frameFinalFlag) {
                    fragmentedChannel = null;
                    ret.finalFrame(); //TODO: should  be in handle header data, maybe
                }
                return ret;
            }
            return null;
        }
View Full Code Here

        private int framePayloadLen1;
        private boolean done = false;

        @Override
        public StreamSourceFrameChannel getChannel(Pooled<ByteBuffer> pooled) {
            StreamSourceFrameChannel channel = createChannel(pooled);
            if (frameFinalFlag) {
                channel.finalFrame();
            } else {
                fragmentedChannel = channel;
            }
            return channel;
        }
View Full Code Here

        }

        @Override
        public AbstractFramedStreamSourceChannel<?, ?, ?> getExistingChannel() {
            if (frameOpcode == OPCODE_CONT) {
                StreamSourceFrameChannel ret = fragmentedChannel;
                if(frameFinalFlag) {
                    fragmentedChannel = null;
                }
                return ret;
            }
View Full Code Here

                connected.set(true);
                channel.getReceiveSetter().set(new ChannelListener<WebSocketChannel>() {
                    @Override
                    public void handleEvent(final WebSocketChannel channel) {
                        try {
                            final StreamSourceFrameChannel ws = channel.receive();
                            if (ws == null) {
                                return;
                            }
                            new StringReadChannelListener(exchange.getBufferPool()) {
                                @Override
View Full Code Here

                connected.set(true);
                channel.getReceiveSetter().set(new ChannelListener<WebSocketChannel>() {
                    @Override
                    public void handleEvent(final WebSocketChannel channel) {
                        try {
                            final StreamSourceFrameChannel ws = channel.receive();
                            if (ws == null) {
                                return;
                            }
                            Assert.assertEquals(WebSocketFrameType.BINARY, ws.getType());
                            ByteBuffer buf = ByteBuffer.allocate(32);
                            while (ws.read(buf) != -1){
                                //noting is needed
                            }
                            buf.flip();

                            StreamSinkFrameChannel sink = channel.send(WebSocketFrameType.BINARY, buf.remaining());
View Full Code Here

                connected.set(true);
                channel.getReceiveSetter().set(new ChannelListener<WebSocketChannel>() {
                    @Override
                    public void handleEvent(final WebSocketChannel channel) {
                        try {
                            final StreamSourceFrameChannel ws = channel.receive();
                            if (ws == null) {
                                return;
                            }
                            Assert.assertEquals(WebSocketFrameType.CLOSE, ws.getType());
                            channel.close();
                            channel.getReceiveSetter().set(null);
                            latch.countDown();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
View Full Code Here

                connected.set(true);
                channel.getReceiveSetter().set(new ChannelListener<WebSocketChannel>() {
                    @Override
                    public void handleEvent(final WebSocketChannel channel) {
                        try {
                            final StreamSourceFrameChannel ws = channel.receive();
                            if (ws == null) {
                                return;
                            }
                            Assert.assertEquals(WebSocketFrameType.PING, ws.getType());
                            ByteBuffer buf = ByteBuffer.allocate(32);
                            while (ws.read(buf) != -1) {
                                // consume
                            }
                            buf.flip();

                            StreamSinkFrameChannel sink = channel.send(WebSocketFrameType.PONG, buf.remaining());
View Full Code Here

        webSocketChannel.getReceiveSetter().set(new ChannelListener<WebSocketChannel>() {
            @Override
            public void handleEvent(final WebSocketChannel channel) {
                ChannelInputStream stream = null;
                try {
                    final StreamSourceFrameChannel r = channel.receive();
                    if (r != null) {
                        stream = new ChannelInputStream(r);
                        result.set(FileUtils.readFile(stream));
                        latch.countDown();
                    }
View Full Code Here

TOP

Related Classes of io.undertow.websockets.core.StreamSourceFrameChannel

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.