在WPF中集成SuperSocket 2.0


本文在.Net5環境下,在WPF項目中集成SuperSocket(V2.0.0-beta.10),以便使WPF程序擁有Socket服務器能力。

本文假設讀者具有在.Net5控制台程序中使用SuperSocket 2.0的能力,因此服務器相關設置不再介紹。

1、創建托管服務器主機

參考在.Net5控制台程序中使用SuperSocket 2.0,將其創建主機的代碼復制過來即可。

public interface ISocketServerService
{
    void Startup();
    void Shutdown();
}

public class SocketServerService : ISocketServerService
{
    private readonly IHost _host;
    private readonly ILogService _logService;

    public SocketServerService(ILogService logService)
    {
        _logService = logService;

        //創建宿主:用Package類型和PipelineFilter類型創建SuperSocket宿主。
        _host = SuperSocketHostBuilder.Create<MyPackageInfo, MyPipelineFilter>()
            //注入Service
            .UseHostedService<MyService<MyPackageInfo>>()
            //注入Session
            .UseSession<MySession>()
            //注入命令
            .UseCommand((commandOptions) =>
            {
                commandOptions.AddCommand<MyCommand>(); //數據命令
            })
            //啟用Session容器
            .UseInProcSessionContainer()
            //配置日志
            .ConfigureLogging((hostCtx, loggingBuilder) => { loggingBuilder.SetMinimumLevel(LogLevel.Warning); })
            .Build();
    }

    public void Startup()
    {
        try
        {
            _host.StartAsync().GetAwaiter();
        }
        catch (Exception e)
        {
            _logService.Error($"啟動SocketServer失敗:{e.Message}.");
        }
    }

    public void Shutdown()
    {
        try
        {
            _host.StopAsync().GetAwaiter().GetResult();
        }
        catch (Exception e)
        {
            _logService.Error($"關閉SocketServer失敗:{e.Message}.");
        }
        finally
        {
            _host.Dispose();
        }
    }
}

2、添加配置文件appsettings.json

注意將其屬性設置為:“生成操作”-“無”,“復制到輸出目錄”-“如果較新則復制”/”始終復制”。

下面的配置僅添加了IP和端口的參數作為示例。

{
  "serverOptions": {
    "name": "MyServer",
    "listeners": [
      {
        "ip": "Any",
        "port": "2021"
      }
    ]
  }
}

3、使用方法

ISocketServerService socketServerService = new SocketServerService(logService);
//啟動Socket服務器
socketServerService.Startup();
//關閉Socket服務器
socketServerService.Shutdown();

4、注意事項

關閉Socket服務器時,如果不對IHost對象調用Dispose方法,SuperSocket不會真正關閉,導致WPF進程無法正常退出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM