Package org.jredis.ri.alphazero

Source Code of org.jredis.ri.alphazero.JRedisAsyncClient

/*
*   Copyright 2009 Joubin Houshyar
*
*   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 org.jredis.ri.alphazero;

import java.util.concurrent.Future;
import org.jredis.ClientRuntimeException;
import org.jredis.ProviderException;
import org.jredis.connector.Connection;
import org.jredis.connector.ConnectionSpec;
import org.jredis.connector.FaultedConnection;
import org.jredis.connector.Connection.Modality;
import org.jredis.connector.Connection.Property;
import org.jredis.protocol.Command;
import org.jredis.protocol.Response;
import org.jredis.ri.alphazero.support.Assert;
import org.jredis.ri.alphazero.support.Log;

/**
* [TODO: document me!]
*
* @author  Joubin Houshyar (alphazero@sensesay.net)
* @version alpha.0, Nov 6, 2009
* @since   alpha.0
*
*/

public class JRedisAsyncClient extends JRedisFutureSupport {
  // ------------------------------------------------------------------------
  // Properties
  // ------------------------------------------------------------------------

  /**  */
  final private Connection  connection;
  /**  */
  final protected ConnectionSpec connSpec;

  // ------------------------------------------------------------------------
  // Construct and initialize
  // ------------------------------------------------------------------------

  /**
   * @param connectionSpec
   */
  public JRedisAsyncClient (ConnectionSpec connectionSpec) {
    // note: using a shared connection mod
    connSpec = Assert.notNull(connectionSpec, "ConnectionSpec 'connectionSpec'", ClientRuntimeException.class);
    connectionSpec.setConnectionFlag(Connection.Flag.RELIABLE, Boolean.TRUE)// REVU: TODO: review all these spot mods.
    connectionSpec.setConnectionFlag(Connection.Flag.SHARED, Boolean.FALSE)// REVU: TODO: review all these spot mods.
    connectionSpec.setConnectionFlag(Connection.Flag.PIPELINE, Boolean.FALSE)// REVU: TODO: review all these spot mods.
    connectionSpec.setModality(Modality.Asynchronous);
//    connection = new AsyncConnection(connectionSpec, true);
    connection = createAsyncConnection();
  }
 
  // ------------------------------------------------------------------------
  // Internal ops
  // ------------------------------------------------------------------------
  final private Connection createAsyncConnection() {
    Connection.Factory cfact = (Connection.Factory) connSpec.getConnectionProperty(Property.CONNECTION_FACTORY);
    Connection   conn = null;
    try {
      conn = Assert.notNull(cfact.newConnection(connSpec), "connection delegate", ClientRuntimeException.class);
    }
    catch (ProviderException e) {
      Log.bug("Couldn't create the handler delegate.  => " + e.getLocalizedMessage());
      throw e;
    }
    catch (ClientRuntimeException e) {
      String msg = String.format("%s\nMake sure your server is running.", e.getMessage());
      Log.error ("Error creating connection -> " + e.getLocalizedMessage());
      conn = new FaultedConnection(connSpec, msg);
    }
    Log.debug ("%s: Using %s", this.getClass().getSimpleName(), conn);
    return conn;
  }
  // ------------------------------------------------------------------------
  // Super overrides
  // ------------------------------------------------------------------------
  /**
   * Requests to server are queued at this point.  Any requests after a {@link Command#QUIT} will
   * raise an exception indicating the pipeline is shutting down. 
   * @see org.jredis.ri.alphazero.JRedisFutureSupport#queueRequest(org.jredis.protocol.Command, byte[][])
   */
  protected  Future<Response> queueRequest (Command cmd, byte[]...args) throws ClientRuntimeException, ProviderException {
    return connection.queueRequest(cmd, args);
  }
}
TOP

Related Classes of org.jredis.ri.alphazero.JRedisAsyncClient

TOP
Copyright © 2018 www.massapi.com. 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.