com.kurento.kmf.thrift.pool.MediaServerSyncClientFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.kurento.kmf.thrift.pool.MediaServerSyncClientFactory.java

Source

/*
 * (C) Copyright 2013 Kurento (http://kurento.org/)
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser General Public License
 * (LGPL) version 2.1 which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl-2.1.html
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 */
package com.kurento.kmf.thrift.pool;

import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import org.springframework.beans.factory.annotation.Autowired;

import com.kurento.kmf.common.exception.KurentoMediaFrameworkException;
import com.kurento.kmf.thrift.ThriftInterfaceConfiguration;
import com.kurento.kms.thrift.api.KmsMediaServerService.Client;

public class MediaServerSyncClientFactory extends BasePooledObjectFactory<Client> {

    @Autowired
    private ThriftInterfaceConfiguration apiConfig;

    @Override
    public Client create() throws Exception {
        return createSyncClient();
    }

    @Override
    public PooledObject<Client> wrap(Client obj) {
        return new DefaultPooledObject<>(obj);
    }

    /**
     * Validates a {@link Client} before returning it to the queue. This check
     * is done based on the status of the {@link TTransport} associated with the
     * client.
     * 
     * @param obj
     *            The object to validate.
     * @return <code>true</code> if the transport is open.
     */
    @Override
    public boolean validateObject(PooledObject<Client> obj) {
        return ((ClientWithValidation) obj.getObject()).isValid();
    }

    /**
     * Closes the transport
     * 
     * @param obj
     *            The object to destroy.
     */
    @Override
    public void destroyObject(PooledObject<Client> obj) {
        obj.getObject().getOutputProtocol().getTransport().close();
        obj.getObject().getInputProtocol().getTransport().close();
    }

    private ClientWithValidation createSyncClient() {
        TSocket socket = new TSocket(this.apiConfig.getServerAddress(), this.apiConfig.getServerPort());
        TTransport transport = new TFramedTransport(socket);
        // TODO: Make protocol configurable
        TProtocol prot = new TBinaryProtocol(transport);
        try {
            transport.open();
        } catch (TTransportException e) {
            throw new KurentoMediaFrameworkException("Could not open transport for client", e, 30000);
        }

        return new ClientWithValidation(prot);
    }

}