package com.midea.cloudSearch;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TMultiplexedProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.midea.cloudSearch.thrift.gen.BlackService;
public class SpringThriftClient {
private int port;
private Map<String, String> serviceMap;
private Map<String, Object> clientMap;
private TTransport transport;
public void setPort(int port) {
this.port = port;
}
public void setServiceMap(Map<String, String> serviceMap) {
this.serviceMap = serviceMap;
}
public Object getClient(String name){
return clientMap.get(name);
}
public void init(){
clientMap = new HashMap<String, Object>();
try {
transport = new TSocket("localhost", port);
TProtocol protocol = new TBinaryProtocol(transport);
for(Map.Entry<String, String> entry : serviceMap.entrySet()){
String obj = entry.getValue();
System.out.println(entry.getKey() + " " + entry.getValue());
TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol,entry.getKey());
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class<?> objectClass = classLoader.loadClass(obj + "$Client");
Constructor<?> stor = objectClass.getDeclaredConstructor(TProtocol.class);
Object client = stor.newInstance(mp);
clientMap.put(entry.getKey(), client);
}
transport.open();
} catch (Exception x) {
x.printStackTrace();
}
}
public void close(){
transport.close();
}
public static void main(String[] args){
try {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-context-thrift-client.xml");
SpringThriftClient springClient = (SpringThriftClient) context.getBean("thriftClient");
BlackService.Client client = (BlackService.Client)springClient.getClient("BlackService");
System.out.println(client.isBlack(1));
} catch (Exception e) {
e.printStackTrace();
}
}
}