Skip to main content

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.