package fr.lteconsulting.hexa.revrpc.server;
import java.util.HashMap;
import fr.lteconsulting.hexa.revrpc.server.CallSerializer.SerializedCallReceiver;
public class RevRPCServices
{
public interface Callback
{
void newCall( JSONObject json );
}
private Callback callback;
public RevRPCServices( Callback callback )
{
this.callback = callback;
}
public <T> T queryInterface( String serviceName, Class<T> serviceInterface )
{
RevRPCService svc = services.get( serviceName );
if( svc == null )
{
svc = new RevRPCService( serviceName );
services.put( serviceName, svc );
}
T proxy = svc.serializer.queryBroadcastInterface( serviceInterface );
return proxy;
}
HashMap<String, RevRPCService> services = new HashMap<String, RevRPCService>();
class RevRPCService
{
public RevRPCService( String serviceName )
{
this.serviceName = serviceName;
}
String serviceName;
CallSerializer serializer = new CallSerializer( new SerializedCallReceiver()
{
public void newCall( Class<?> proxiedInterface, JSONObject obj )
{
JSONObject serviceCall = new JSONObject();
serviceCall.put( "service", serviceName );
serviceCall.put( "interface", proxiedInterface.getCanonicalName() );
serviceCall.put( "value", obj );
callback.newCall( serviceCall );
}
} );
}
}