Aware
Introduction
The framework currently has no DI feature, so objects cannot be injected into properties of other objects directly. But it provides an Aware mechanism to support similar capabilities.
ExternalSettingAware
When extending custom NettyHandlers, heartbeat hooks, or user hook interfaces, you can use Aware to obtain:
- UserSessions: manager for all connected users.
- Server external-server info.
- ConvenientCommunication object.
public interface ExternalSettingAware {
void setExternalSetting(ExternalSetting setting);
}
After implementing ExternalSettingAware, the framework automatically calls setExternalSetting.
How to Use
User online/offline hook example
- code 7: get
UserSessions. - code 8: get
ConvenientCommunication.
public final class MyUserHook implements UserHook,
ExternalSettingAware
{
UserSessions<?, ?> userSessions;
ConvenientCommunication convenientCommunication;
@Override
public void setExternalSetting(ExternalSetting setting) {
this.userSessions = setting.userSessions();
this.convenientCommunication = setting.convenientCommunication();
}
...
}
Custom NettyHandler
@ChannelHandler.Sharable
public final class YourNettyHandler extends ChannelInboundHandlerAdapter
implements ExternalSettingAware
{
SocketUserSessions userSessions;
...
@Override
public void setExternalSetting(ExternalSetting setting) {
this.userSessions = setting.userSessions();
this.convenientCommunication = setting.convenientCommunication();
}
}
Add YourNettyHandler to external server.
private static ExternalServer ofExternalServer() {
var externalServerBuilder = MyExternalServer.builder(ExternalGlobalConfig.externalPort, ExternalJoinEnum.WEBSOCKET);
externalServerBuilder.setMicroBootstrapFlow(new WebSocketMicroBootstrapFlow(){
@Override
public void pipelineCustom(PipelineContext context) {
super.pipelineCustom(context);
context.addLast("YourNettyHandler", new YourNettyHandler());
}
});
return externalServerBuilder.build();
}
warning
You must use context.addLast to add NettyHandler, otherwise Aware cannot inject.
More Examples
Please refer to source code of implementation classes in built-in and optional Handlers.