扩展你的 AppSession 和 SuperSocketService

Keywords: SuperSocketService, AppSession

什么是 AppSession?

AppSession 代表一个和客户端的逻辑连接,基于连接的操作应该定于在该类之中。你可以用该类的实例发送数据到客户端,接收客户端发送的数据或者关闭连接。

什么是 SuperSocketService?

SuperSocketService 代表了监听所有客户端连接的服务器实例,宿主所有连接。 应用程序级别的操作和业务逻辑可以定义在里面。

扩展你的 AppSession

  1. 重写 AppSession 的操作

    1. public class TelnetSession : AppSession
    2. {
    3. protected override async ValueTask OnSessionConnectedAsync()
    4. {
    5. // do something right after the sesssion is connected
    6. }
    7. protected override async ValueTask OnSessionClosedAsync(EventArgs e)
    8. {
    9. // do something right after the sesssion is closed
    10. }
    11. }
  2. 你也可以根据业务需要给你的 AppSession 添加新的属性 让我们创建一个可以用与游戏服务器的一个 AppSession:

    1. public class PlayerSession AppSession
    2. {
    3. public int GameHallId { get; internal set; }
    4. public int RoomId { get; internal set; }
    5. }
  3. 在你的 SuperSocket 服务中采用你的 AppSession 通过builder来注册你的 AppSession 类型

    1. builder.UseSession<MySession>();

创建你自己的 SuperSocket Service

  1. 扩展 SuperSocketService 并按照你的需要重写操作:

    1. public class GameService<TReceivePackageInfo> : SuperSocketService<TReceivePackageInfo>
    2. where TReceivePackageInfo : class
    3. {
    4. public GameService(IServiceProvider serviceProvider, IOptions<ServerOptions> serverOptions)
    5. : base(serviceProvider, serverOptions)
    6. {
    7. }
    8. protected override async ValueTask OnSessionConnectedAsync(IAppSession session)
    9. {
    10. // do something right after the sesssion is connected
    11. await base.OnSessionConnectedAsync(session);
    12. }
    13. protected override async ValueTask OnSessionClosedAsync(IAppSession session)
    14. {
    15. // do something right after the sesssion is closed
    16. await base.OnSessionClosedAsync(session);
    17. }
    18. protected override async ValueTask OnStartedAsync()
    19. {
    20. // do something right after the service is started
    21. }
    22. protected override async ValueTask OnStopAsync()
    23. {
    24. // do something right after the service is stopped
    25. }
    26. }
  2. 开始使用你自己的 Serivce 类型 通过 builder 注册你的 service 类型:

    builder.UseHostedService<GameService>();