@ -1,10 +1,5 @@
package com.fr.third.redis.clients.jedis ;
import java.io.IOException ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Locale ;
import com.fr.third.redis.clients.jedis.commands.ProtocolCommand ;
import com.fr.third.redis.clients.jedis.exceptions.JedisAskDataException ;
import com.fr.third.redis.clients.jedis.exceptions.JedisBusyException ;
@ -17,6 +12,13 @@ import com.fr.third.redis.clients.jedis.util.RedisInputStream;
import com.fr.third.redis.clients.jedis.util.RedisOutputStream ;
import com.fr.third.redis.clients.jedis.util.SafeEncoder ;
import java.io.IOException ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Locale ;
import java.util.Map ;
public final class Protocol {
private static final String ASK_RESPONSE = "ASK" ;
@ -79,13 +81,44 @@ public final class Protocol {
public static final byte [ ] POSITIVE_INFINITY_BYTES = "+inf" . getBytes ( ) ;
public static final byte [ ] NEGATIVE_INFINITY_BYTES = "-inf" . getBytes ( ) ;
public static Map < ProtocolCommand , ProtocolCommand > commandMapping = new HashMap < ProtocolCommand , ProtocolCommand > ( ) ;
public static volatile int commandMappingSize = 0 ;
public static synchronized void initCommandMapping ( Map < String , String > mapping ) {
commandMapping . clear ( ) ;
for ( Map . Entry < String , String > entry : mapping . entrySet ( ) ) {
ProtocolCommand defaultCommand = Command . fromName ( entry . getKey ( ) ) ;
if ( defaultCommand ! = null ) {
commandMapping . put ( defaultCommand , new ProtocolCommand ( ) {
@Override
public byte [ ] getRaw ( ) {
return SafeEncoder . encode ( entry . getValue ( ) ) ;
}
} ) ;
}
}
commandMappingSize = commandMapping . size ( ) ;
}
private Protocol ( ) {
// this prevent the class from instantiation
}
public static void sendCommand ( final RedisOutputStream os , final ProtocolCommand command ,
final byte [ ] . . . args ) {
sendCommand ( os , command . getRaw ( ) , args ) ;
ProtocolCommand realCommand = getRealCommand ( command ) ;
sendCommand ( os , realCommand . getRaw ( ) , args ) ;
}
private static ProtocolCommand getRealCommand ( ProtocolCommand command ) {
if ( commandMappingSize > 0 & & commandMapping . containsKey ( command ) ) {
return commandMapping . get ( command ) ;
}
return command ;
}
private static void sendCommand ( final RedisOutputStream os , final byte [ ] command ,
@ -268,6 +301,17 @@ public final class Protocol {
public byte [ ] getRaw ( ) {
return raw ;
}
public static ProtocolCommand fromName ( String commandName ) {
Command [ ] commands = values ( ) ;
for ( Command command : commands ) {
if ( command . name ( ) . equals ( commandName ) ) {
return command ;
}
}
return null ;
}
}
public static enum Keyword {