All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.client.DefaultClientBinder Maven / Gradle / Ivy

There is a newer version: 3.12.13
Show newest version
/*
 * Copyright (c) 2008-2010, Hazel Ltd. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.hazelcast.client;

import com.hazelcast.client.cluster.Bind;
import com.hazelcast.config.GroupConfig;
import com.hazelcast.impl.ClusterOperation;
import com.hazelcast.logging.ILogger;
import com.hazelcast.logging.Logger;
import com.hazelcast.nio.Address;

import java.io.IOException;
import java.net.UnknownHostException;
import java.util.logging.Level;

import static com.hazelcast.client.IOUtil.toByte;
import static com.hazelcast.client.IOUtil.toObject;

public class DefaultClientBinder implements ClientBinder {
    private HazelcastClient client;
    private final ILogger logger = Logger.getLogger(getClass().getName());

    public DefaultClientBinder(HazelcastClient client) {
        this.client = client;
    }

    public void bind(Connection connection) throws IOException {
        logger.log(Level.FINEST, connection + " -> "
                + connection.getAddress().getHostName() + ":" + connection.getSocket().getLocalPort());
        auth(connection);
        Bind b = null;
        try {
            b = new Bind(new Address(connection.getAddress().getHostName(), connection.getSocket().getLocalPort()));
        } catch (UnknownHostException e) {
            logger.log(Level.WARNING, e.getMessage() + " while creating the bind package.");
            throw e;
        }
        Packet bind = new Packet();
        bind.set("remotelyProcess", ClusterOperation.REMOTELY_PROCESS, toByte(null), toByte(b));
        write(connection, bind);
    }

    void auth(Connection connection) throws IOException {
        Packet auth = new Packet();
        final GroupConfig groupConfig = client.groupConfig();
        auth.set("", ClusterOperation.CLIENT_AUTHENTICATE,
                toByte(groupConfig.getName()), toByte(groupConfig.getPassword()));
        Packet packet = writeAndRead(connection, auth);
        final Object response = toObject(packet.getValue());
        logger.log(Level.FINEST, "auth responce:" + response);
        if (response instanceof Exception) {
            throw new RuntimeException((Exception) response);
        }
        if (!Boolean.TRUE.equals(response)) {
                throw new AuthenticationException("Client [" + connection + "] has failed authentication");
        }
    }

    Packet writeAndRead(Connection connection, Packet packet) throws IOException {
        write(connection, packet);
        return client.getInRunnable().reader.readPacket(connection);
    }

    void write(Connection connection, Packet packet) throws IOException {
        client.getOutRunnable().write(connection, packet);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy