bindListener(new AbstractMatcher<TypeLiteral<?>>() {
@Override
public boolean matches(TypeLiteral<?> o) {
return o.getRawType().isAnnotationPresent(Service.class);
}
}, new TypeListener() {
@Override
public <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) {
final Provider<ServerAnnotationProcessor> processor =
encounter.getProvider(ServerAnnotationProcessor.class);
encounter.register(new InjectionListener<I>() {
@Override
public void afterInjection(I injectee) {
processor.get().process(injectee);
}
});
}
});
// automatically add extensions
bindListener(new AbstractMatcher<TypeLiteral<?>>() {
@Override
public boolean matches(TypeLiteral<?> o) {
return BayeuxServer.Extension.class.isAssignableFrom(o.getRawType());
}
}, new TypeListener() {
@Override
public <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) {
final Provider<BayeuxServer> server = encounter.getProvider(BayeuxServer.class);
encounter.register(new InjectionListener<I>() {
@Override
public void afterInjection(I injectee) {
server.get().addExtension(BayeuxServer.Extension.class.cast(injectee));
}
});
}
});
// automatically add session listeners
bindListener(new AbstractMatcher<TypeLiteral<?>>() {
@Override
public boolean matches(TypeLiteral<?> o) {
return BayeuxServer.BayeuxServerListener.class.isAssignableFrom(o.getRawType());
}
}, new TypeListener() {
@Override
public <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) {
final Provider<BayeuxServer> server = encounter.getProvider(BayeuxServer.class);
encounter.register(new InjectionListener<I>() {
@Override