安装
nuget 安装RRQMSocket.RPC.AspNetCore
。
定义服务
在服务器端中新建一个类,继承于ServerProvider类(或实现IServerProvider),然后在该类中写公共方法,并用TouchRpc属性标签标记,如果方法有重载,需要重新指定函数键。
- 支持out,ref关键字。
- 支持代理生成注释。
支持注入。
public class TestServerProvider: ServerProvider
{
private readonly ILogger<TestServerProvider> m_logger;
/// <summary>
/// 支持注入
/// </summary>
/// <param name="service"></param>
/// <param name="logger"></param>
public TestServerProvider(IWSTouchRpcService service,ILogger<TestServerProvider> logger)
{
this.m_logger = logger;
}
[Description("登录")]
[TouchRpc]
public bool Login(string account, string password)
{
if (account == "123" && password == "abc")
{
m_logger.LogInformation("True");
return true;
}
m_logger.LogInformation("False");
return false;
}
}
注入服务
在ConfigureServices时,添加AddWSTouchRpc,并且配置相关项。
public static RpcStore RpcStore { get; set; } = new RpcStore();
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//声明一个适应于Asp,兼容IServiceCollection服务的容器
IContainer container = new AspNetCoreContainer(services);
//向Asp服务中添加IWSTouchRpcService
var touchRpcService = services.AddWSTouchRpc(new RRQMSocket.RRQMConfig()
.SetContainer(container));//设置IOC容器
RpcStore.Container = container;//和RpcStore共享容器
RpcStore.AddRpcParser(nameof(touchRpcService), touchRpcService);//添加解析器
RpcStore.RegisterAllServer();//注册所有服务。
services.AddControllers();
// Swagger
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Demo", Version = "v1" });
});
}
启用中间件
首先必须启用WebSocket。其次使用UseWSTouchRpc即可。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Swagger
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Demo v1");
});
app.UseWebSockets();//必须先使用WebSocket
app.UseWSTouchRpc("/wstouchrpc");//该操作不会影响原有的WebSocket,只要url不同即可。
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}