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.