@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { writers[buildKey(this,method.getName())].write(args); return null; }
private static <T> T slowCreate(final EventConsumer consumer, Class<T> clazz) { int msgIdx = FieldReferenceOffsetManager.lookupTemplateLocator(clazz.getAnnotation(ProngTemplateMessage.class).templateId(), Pipe.from(consumer.output)); if (PipeWriter.tryWriteFragment(consumer.output, msgIdx)) { T result = (T) Proxy.newProxyInstance( clazz.getClassLoader(), new Class[] { clazz }, new OutputPipeInvocationHandler(consumer.output, msgIdx, clazz)); consumer.cached = result; //TODO: needs smarter pool but this is fine for now. consumer.cachedMsgId = msgIdx; return result; } else { return null; } }
private static <T> T slowCreate(final EventConsumer consumer, Class<T> clazz) { int msgIdx = FieldReferenceOffsetManager.lookupTemplateLocator(clazz.getAnnotation(ProngTemplateMessage.class).templateId(), Pipe.from(consumer.output)); if (PipeWriter.tryWriteFragment(consumer.output, msgIdx)) { T result = (T) Proxy.newProxyInstance( clazz.getClassLoader(), new Class[] { clazz }, new OutputPipeInvocationHandler(consumer.output, msgIdx, clazz)); consumer.cached = result; //TODO: needs smarter pool but this is fine for now. consumer.cachedMsgId = msgIdx; return result; } else { return null; } }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { writers[buildKey(this,method.getName())].write(args); return null; }
private static <T> T slowCreate(final EventConsumer consumer, Class<T> clazz) { int msgIdx = FieldReferenceOffsetManager.lookupTemplateLocator(clazz.getAnnotation(ProngTemplateMessage.class).templateId(), Pipe.from(consumer.output)); if (PipeWriter.tryWriteFragment(consumer.output, msgIdx)) { T result = (T) Proxy.newProxyInstance( clazz.getClassLoader(), new Class[] { clazz }, new OutputPipeInvocationHandler(consumer.output, msgIdx, clazz)); consumer.cached = result; //TODO: needs smarter pool but this is fine for now. consumer.cachedMsgId = msgIdx; return result; } else { return null; } }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { writers[buildKey(this,method.getName())].write(args); return null; }
public OutputPipeInvocationHandler(Pipe pipe, int msgIdx, Class<?> clazz) { super(clazz.getMethods()); FieldReferenceOffsetManager from = Pipe.from(pipe); final Method[] methods = clazz.getMethods(); writers = new OutputPipeWriterMethod[MAX_METHODS]; int j = methods.length; while (--j>=0) { final Method method = methods[j]; ProngTemplateField fieldAnnonation = method.getAnnotation(ProngTemplateField.class); if (null!=fieldAnnonation) { int fieldLoc = FieldReferenceOffsetManager.lookupFieldLocator(fieldAnnonation.fieldId(), msgIdx, from); int key = buildKey(this, method.getName()); if (null!=writers[key]) { throw new UnsupportedOperationException(); } writers[key] = OutputPipeWriterMethod.buildWriteForYourType(pipe, fieldAnnonation.decimalPlaces(), fieldLoc, (fieldLoc >> FieldReferenceOffsetManager.RW_FIELD_OFF_BITS) & TokenBuilder.MASK_TYPE, from); } } }
public OutputPipeInvocationHandler(Pipe pipe, int msgIdx, Class<?> clazz) { super(clazz.getMethods()); FieldReferenceOffsetManager from = Pipe.from(pipe); final Method[] methods = clazz.getMethods(); writers = new OutputPipeWriterMethod[MAX_METHODS]; int j = methods.length; while (--j>=0) { final Method method = methods[j]; ProngTemplateField fieldAnnonation = method.getAnnotation(ProngTemplateField.class); if (null!=fieldAnnonation) { int fieldLoc = FieldReferenceOffsetManager.lookupFieldLocator(fieldAnnonation.fieldId(), msgIdx, from); int key = buildKey(this, method.getName()); if (null!=writers[key]) { throw new UnsupportedOperationException(); } writers[key] = OutputPipeWriterMethod.buildWriteForYourType(pipe, fieldAnnonation.decimalPlaces(), fieldLoc, (fieldLoc >> FieldReferenceOffsetManager.RW_FIELD_OFF_BITS) & TokenBuilder.MASK_TYPE, from); } } }
public OutputPipeInvocationHandler(Pipe pipe, int msgIdx, Class<?> clazz) { super(clazz.getMethods()); FieldReferenceOffsetManager from = Pipe.from(pipe); final Method[] methods = clazz.getMethods(); writers = new OutputPipeWriterMethod[MAX_METHODS]; int j = methods.length; while (--j>=0) { final Method method = methods[j]; ProngTemplateField fieldAnnonation = method.getAnnotation(ProngTemplateField.class); if (null!=fieldAnnonation) { int fieldLoc = FieldReferenceOffsetManager.lookupFieldLocator(fieldAnnonation.fieldId(), msgIdx, from); int key = buildKey(this, method.getName()); if (null!=writers[key]) { throw new UnsupportedOperationException(); } writers[key] = OutputPipeWriterMethod.buildWriteForYourType(pipe, fieldAnnonation.decimalPlaces(), fieldLoc, (fieldLoc >> FieldReferenceOffsetManager.RW_FIELD_OFF_BITS) & TokenBuilder.MASK_TYPE, from); } } }