Search in sources :

Example 1 with TextReadHandler

use of com.hazelcast.nio.ascii.TextReadHandler in project hazelcast by hazelcast.

the class SocketReaderInitializerImpl method init.

@Override
public void init(TcpIpConnection connection, SocketReader reader) throws IOException {
    TcpIpConnectionManager connectionManager = connection.getConnectionManager();
    IOService ioService = connectionManager.getIoService();
    ByteBuffer protocolBuffer = reader.getProtocolBuffer();
    SocketChannelWrapper socketChannel = reader.getSocketChannel();
    int readBytes = socketChannel.read(protocolBuffer);
    if (readBytes == -1) {
        throw new EOFException("Could not read protocol type!");
    }
    if (readBytes == 0 && connectionManager.isSSLEnabled()) {
        // when using SSL, we can read 0 bytes since data read from socket can be handshake frames.
        return;
    }
    if (protocolBuffer.hasRemaining()) {
        // we have not yet received all protocol bytes
        return;
    }
    ReadHandler readHandler;
    String protocol = bytesToString(protocolBuffer.array());
    SocketWriter socketWriter = connection.getSocketWriter();
    if (CLUSTER.equals(protocol)) {
        initInputBuffer(connection, reader, ioService.getSocketReceiveBufferSize());
        connection.setType(MEMBER);
        socketWriter.setProtocol(CLUSTER);
        readHandler = ioService.createReadHandler(connection);
    } else if (CLIENT_BINARY_NEW.equals(protocol)) {
        initInputBuffer(connection, reader, ioService.getSocketClientReceiveBufferSize());
        socketWriter.setProtocol(CLIENT_BINARY_NEW);
        readHandler = new ClientReadHandler(reader.getNormalFramesReadCounter(), connection, ioService);
    } else {
        ByteBuffer inputBuffer = initInputBuffer(connection, reader, ioService.getSocketReceiveBufferSize());
        socketWriter.setProtocol(TEXT);
        inputBuffer.put(protocolBuffer.array());
        readHandler = new TextReadHandler(connection);
        connectionManager.incrementTextConnections();
    }
    if (readHandler == null) {
        throw new IOException("Could not initialize ReadHandler!");
    }
    reader.initReadHandler(readHandler);
}
Also used : IOService(com.hazelcast.nio.IOService) SocketChannelWrapper(com.hazelcast.internal.networking.SocketChannelWrapper) TextReadHandler(com.hazelcast.nio.ascii.TextReadHandler) ReadHandler(com.hazelcast.internal.networking.ReadHandler) EOFException(java.io.EOFException) StringUtil.bytesToString(com.hazelcast.util.StringUtil.bytesToString) IOException(java.io.IOException) SocketWriter(com.hazelcast.internal.networking.SocketWriter) TextReadHandler(com.hazelcast.nio.ascii.TextReadHandler) ByteBuffer(java.nio.ByteBuffer) IOUtil.newByteBuffer(com.hazelcast.nio.IOUtil.newByteBuffer)

Aggregations

ReadHandler (com.hazelcast.internal.networking.ReadHandler)1 SocketChannelWrapper (com.hazelcast.internal.networking.SocketChannelWrapper)1 SocketWriter (com.hazelcast.internal.networking.SocketWriter)1 IOService (com.hazelcast.nio.IOService)1 IOUtil.newByteBuffer (com.hazelcast.nio.IOUtil.newByteBuffer)1 TextReadHandler (com.hazelcast.nio.ascii.TextReadHandler)1 StringUtil.bytesToString (com.hazelcast.util.StringUtil.bytesToString)1 EOFException (java.io.EOFException)1 IOException (java.io.IOException)1 ByteBuffer (java.nio.ByteBuffer)1