use of act.event.EventBus in project actframework by actframework.
the class EventListener method excute.
public static void excute(MsgTemplate template) {
EventBus eventBus = App.instance().getInstance(EventBus.class);
eventBus.trigger("message-send", template);
}
use of act.event.EventBus in project actframework by actframework.
the class NetworkHandler method handle.
public void handle(final ActionContext ctx, final NetworkDispatcher dispatcher) {
if (isDestroyed()) {
return;
}
Exception refreshError = null;
if (Act.isDev()) {
try {
boolean updated = app.checkUpdates(false);
if (updated && !app.hasBlockIssue()) {
app.jobManager().on(SysEventId.POST_START, new Runnable() {
@Override
public void run() {
handle(ctx, dispatcher);
}
}, true);
dispatcher.keep();
return;
}
} catch (Exception e) {
refreshError = e;
}
}
final H.Request req = ctx.req();
String url = req.url();
H.Method method = req.method();
url = contentSuffixProcessor.apply(req, url);
try {
url = urlContextProcessor.apply(req, url);
} catch (NotFound notFound) {
ctx.handler(AlwaysNotFound.INSTANCE);
ctx.saveLocal();
AlwaysNotFound.INSTANCE.apply(ctx);
return;
}
Timer timer = metric.startTimer(MetricInfo.ROUTING);
final RequestHandler requestHandler = router().getInvoker(method, url, ctx);
ctx.handler(requestHandler);
timer.stop();
boolean resourceGetter = requestHandler instanceof ResourceGetter || requestHandler instanceof FileGetter;
if (null != refreshError && !resourceGetter) {
ctx.saveLocal();
handleException(refreshError, ctx, "Error refreshing app");
ActionContext.clearCurrent();
return;
}
NetworkJob job = new NetworkJob() {
@Override
public void run() {
Timer timer = Metric.NULL_METRIC.startTimer("null");
if (metric != Metric.NULL_METRIC) {
String key = S.concat(MetricInfo.HTTP_HANDLER, ":", requestHandler.toString());
timer = metric.startTimer(key);
}
ctx.saveLocal();
EventBus eventBus = app.eventBus();
try {
eventBus.emit(new PreHandle(ctx));
requestHandler.handle(ctx);
} catch (Result r) {
if (isError(r)) {
ctx.handler(FastRequestHandler.DUMB);
}
try {
r = RequestHandlerProxy.GLOBAL_AFTER_INTERCEPTOR.apply(r, ctx);
} catch (Exception e) {
logger.error(e, "Error calling global after interceptor");
r = ActErrorResult.of(e);
}
if (null == ctx.handler() || isError(r)) {
ctx.handler(FastRequestHandler.DUMB);
}
H.Format fmt = req.accept();
if (H.Format.UNKNOWN == fmt) {
fmt = req.contentType();
}
ctx.prepareRespForWrite().addHeaderIfNotAdded(H.Header.Names.CONTENT_TYPE, fmt.contentType());
r.apply(req, ctx.prepareRespForWrite());
} catch (Exception e) {
handleException(e, ctx, "Error handling network request");
} finally {
// we don't destroy ctx here in case it's been passed to
// another thread
eventBus.emit(new PostHandle(ctx));
ActionContext.clearCurrent();
timer.stop();
}
}
};
if (method.unsafe() || !requestHandler.express(ctx)) {
dispatcher.dispatch(job);
} else {
job.run();
}
}
use of act.event.EventBus in project actframework by actframework.
the class ControllerByteCodeScannerTest method setup.
@Before
public void setup() throws Exception {
super.setup();
controllerScanner = new ControllerByteCodeScanner();
jobScanner = new JobByteCodeScanner();
scannerManager = mock(AppCodeScannerManager.class);
classInfoRepository = mock(ClassInfoRepository.class);
eventBus = mock(EventBus.class);
when(mockApp.eventBus()).thenReturn(eventBus);
jobManager = new JobManager(mockApp);
classLoader = new TestingAppClassLoader(mockApp);
$.setProperty(classLoader, classInfoRepository, "classInfoRepository");
when(mockApp.classLoader()).thenReturn(classLoader);
infoSrc = classLoader.controllerClassMetaInfoManager();
when(mockApp.classLoader()).thenReturn(classLoader);
when(mockApp.scannerManager()).thenReturn(scannerManager);
when(mockApp.jobManager()).thenReturn(jobManager);
when(mockAppConfig.possibleControllerClass(anyString())).thenReturn(true);
when(mockRouter.isActionMethod(anyString(), anyString())).thenReturn(false);
C.List<AppByteCodeScanner> scanners = $.cast(C.listOf(controllerScanner, jobScanner));
// C.List<AppByteCodeScanner> scanners = C.list(controllerScanner);
when(scannerManager.byteCodeScanners()).thenReturn(scanners);
paramValueLoaderManager = mock(ParamValueLoaderManager.class);
when(mockApp.service(ParamValueLoaderManager.class)).thenReturn(paramValueLoaderManager);
controllerScanner.setApp(mockApp);
jobScanner.setApp(mockApp);
base = new File("./target/test-classes");
}
use of act.event.EventBus in project actframework by actframework.
the class ControllerEnhancerTest method setup.
@Before
public void setup() throws Exception {
super.setup();
invokeLog = mock(InvokeLog.class);
scanner = new ControllerByteCodeScanner();
scanner.setApp(mockApp);
eventBus = mock(EventBus.class);
classLoader = new TestingAppClassLoader(mockApp);
classInfoRepository = mock(ClassInfoRepository.class);
$.setProperty(classLoader, classInfoRepository, "classInfoRepository");
infoSrc = classLoader.controllerClassMetaInfoManager();
scannerManager = mock(AppCodeScannerManager.class);
when(mockApp.classLoader()).thenReturn(classLoader);
when(mockApp.scannerManager()).thenReturn(scannerManager);
when(mockApp.eventBus()).thenReturn(eventBus);
when(mockAppConfig.possibleControllerClass(anyString())).thenReturn(true);
when(mockRouter.isActionMethod(anyString(), anyString())).thenReturn(false);
C.List<AppByteCodeScanner> scanners = C.list(scanner);
when(scannerManager.byteCodeScanners()).thenReturn(scanners);
InvokeLogFactory.set(invokeLog);
ActionContext.clearCurrent();
ctx = ActionContext.create(mockApp, mockReq, mockResp);
ctx.saveLocal();
base = new File("./target/test-classes");
}
use of act.event.EventBus in project actframework by actframework.
the class App method emit.
public void emit(SysEventId sysEvent) {
if (logger.isTraceEnabled()) {
logger.trace(S.concat("emitting event: ", sysEvent.name()));
}
currentState = sysEvent;
eventEmitted().add(sysEvent);
EventBus bus = eventBus();
if (null != bus) {
bus.emit(sysEvent);
}
}
Aggregations